此版本的 GitHub Enterprise 已停止服务 2021-09-23. 即使针对重大安全问题,也不会发布补丁。 要获得更好的性能、改进的安全性和新功能,请升级到 GitHub Enterprise 的最新版本。 如需升级方面的帮助,请联系 GitHub Enterprise 支持

创建预接收挂钩环境

要执行预接收挂钩,请使用默认的预接收环境,或者创建自定义环境。

GitHub Enterprise Server 的预接收环境是 Linux chroot 环境。 由于预接收挂钩会在每个推送事件上执行,因此它们应该快速且轻量化。 这类检查需要的环境通常极少。

GitHub Enterprise Server 提供了一个默认环境,其中包括以下包:awkbashcoreutilscurlfindgnupggrepjqsed

如果您具有此环境未满足的特定要求(例如对特定语言的支持),则可以创建并上传您自己的 64 位 Linux chroot 环境。

使用 Docker 创建预接收挂钩环境

您可以使用 Linux 容器管理工具来构建预接收挂钩环境。 此示例使用 Alpine LinuxDocker

  1. 确保 Docker 在本地安装

  2. 创建包含此信息的文件 Dockerfile.alpine-3.3

    FROM gliderlabs/alpine:3.3
    RUN apk add --no-cache git bash
    
  3. 从包含 Dockerfile.dev 的工作目录中,构建一个镜像:

    $ 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
  4. 创建一个容器:

    $ docker create --name pre-receive.alpine-3.3 pre-receive.alpine-3.3 /bin/true
  5. 将 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 创建预接收挂钩环境

  1. 创建 Linux chroot 环境。

  2. 创建 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 目录。

关于创建 chroot 环境的更多信息,请参阅 Debian Wiki 中的“Chroot”、Ubuntu 社区帮助 Wiki 中的“BasicChroot”,或者 Alpine Linux Wiki 中的“在 chroot 中安装 Alpine Linux”。

在 GitHub Enterprise Server 上上传预接收挂钩环境

  1. 在 GitHub Enterprise Server 的右上角,单击您的个人资料照片,然后单击 Enterprise settings(Enterprise 设置)GitHub Enterprise Server 上个人资料照片下拉菜单中的"Enterprise settings(企业设置)"

  2. 在企业帐户侧边栏中,单击 Settings(设置)企业帐户侧边栏中的“设置”选项卡

  3. 在“ Settings(设置)”下,单击 Hooks(挂钩)企业帐户设置侧边栏中的 Hooks(挂钩)选项卡

  4. 单击 Manage environments管理环境

  5. 单击 Add environment添加环境

  6. Environment name 字段中输入所需的名称。 环境名称

  7. 输入包含您的环境的 * .tar.gz 文件的 URL。 从 URL 上传环境

  8. 单击 Add environmentAdd environment 按钮

通过管理 shell 上传预接收挂钩环境

  1. 将包含您的环境的可读 * .tar.gz 文件上传到 web 主机并复制 URL 或通过 scp 将文件传送到 GitHub Enterprise Server 设备。 使用 scp 时,您可能需要调整 * .tar.gz 文件权限,以使该文件全局可读。

  2. 连接到管理 shell。

  3. 使用 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.