GitHub Enterprise Server 的预接收环境是 Linux chroot
环境。 由于预接收挂钩会在每个推送事件上执行,� 此它们应该快速且轻量化。 这类检查需要的环境通常极少。
GitHub Enterprise Server 提供了一个默认环境,其中包括以下包:awk
、bash
、coreutils
、curl
、find
、gnupg
、grep
、jq
和 sed
。
如果� 具有此环境未满足的特定要求(例如对特定语言的支持),则可以创建并上� 自己的 64 位 Linux chroot
环境。
使用 Docker 创建预接收挂钩环境
您可以使用 Linux 容器管理工具来构建预接收挂钩环境。 此示例使用 Alpine Linux 和 Docker。
-
创建包含此信息的文件
Dockerfile.alpine-3.3
:FROM gliderlabs/alpine:3.3 RUN apk add --no-cache git bash
-
从包含
Dockerfile.alpine-3.3
的工作目录中生成� 像:$ docker build -f Dockerfile.alpine-3.3 -t pre-receive.alpine-3.3 . > Sending build context to Docker daemon 12.29 kB > Step 1 : FROM gliderlabs/alpine:3.3 > ---> 8944964f99f4 > Step 2 : RUN apk add --no-cache git bash > ---> Using cache > ---> 0250ab3be9c5 > Successfully built 0250ab3be9c5
-
创建一个容器:
$ docker create --name pre-receive.alpine-3.3 pre-receive.alpine-3.3 /bin/true
-
将 Docker 容器导出到
gzip
压缩的tar
文件:$ docker export pre-receive.alpine-3.3 | gzip > alpine-3.3.tar.gz
此文件
alpine-3.3.tar.gz
已准备好上� 到 GitHub Enterprise Server 设备。
使用 chroot 创建预接收挂钩环境
-
创建 Linux
chroot
环境。 -
创建
chroot
目录的gzip
压缩tar
文件。$ cd /path/to/chroot $ tar -czf /path/to/pre-receive-environment.tar.gz .
注意:
- 请勿在 tar 存档中包含文件的前导目录路径,例如
/path/to/chroot
。 /bin/sh
必须存在并且可执行,作为 chroot 环境的入口点。- 与� 统的 chroot 不同,预接收挂钩的 chroot 环境不需要
dev
目录。
- 请勿在 tar 存档中包含文件的前导目录路径,例如
有关创建 chroot 环境的更多信息,请参阅 Debian Wiki 中的“Chroot”、Ubuntu 社区帮助 Wiki 中的“BasicChroot”,或 Alpine Linux Wiki 中的“在 chroot 中安装 Alpine Linux” 。
在 GitHub Enterprise Server 上上� 预接收挂钩环境
- 在 GitHub Enterprise Server 的右上角,单击� 的个人资料照片,然后单击“企业设置”。 1. 在企业帐户侧边� �中,单击 “设置”。 1. 在“ 设置”下,单击“挂钩”。
- 单击“管理环境”。
- 单击“添� 环境”。
- 在“环境名称”字段中输入所需名称。
- 输入包含� 的环境的
*.tar.gz
文件的 URL。 - 单击“添� 环境”。
通过管理 shell 上� 预接收挂钩环境
-
将包含环境的可读
*.tar.gz
文件上� 到 Web 主机并复制 URL 或通过scp
将文件� 输到 GitHub Enterprise Server 设备。 使用scp
时,可能需要调整*.tar.gz
文件权限,以使文件全局可读。 -
连接到管理 shell。
-
使用
ghe-hook-env-create
命令并键入环境所需的名称作为第一个参数,并键入包含环境的*.tar.gz
文件的完整本地路径或 URL 作为第二个参数。admin@ghe-host:~$ ghe-hook-env-create AlpineTestEnv /home/admin/alpine-3.3.tar.gz > Pre-receive hook environment 'AlpineTestEnv' (2) has been created.