Skip to main content

创建预接收挂钩环境

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

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

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

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

预接收挂钩环境中使用的 Git 版本必须至少为 2.11,或者如果使用是是 libgit2,则必须至少使用版本 0.18。 如果使用的是另一个 Git 实现,则其必须支持 info/alternates 文件中的相对路径。

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

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

  1. 确保在本地安装 Docker

  2. 创建包含此信息的文件 Dockerfile.debian

    FROM --platform=linux/amd64 debian:stable
    RUN apt-get update && apt-get install -y git bash curl
    RUN rm -fr /etc/localtime /usr/share/zoneinfo/localtime
    

Note

Debian 映像默认包含一些符号链接,如果未删除,在自定义环境中执行脚本时这些符号链接可能会导致错误。 符号链接在上面的示例的最后一行中删除。

  1. 从包含 Dockerfile.debian 的工作目录中生成映像:

    $ docker build -f Dockerfile.debian -t pre-receive.debian .
    > [+] Building 0.6s (6/6) FINISHED                                                                   docker:desktop-linux
    > => [internal] load build definition from Dockerfile.debian                                                              
    > => [1/2] FROM docker.io/library/debian:latest@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6  
    > => [2/2] RUN apt-get update && apt-get install -y git bash curl                                            
    > => exporting to image                                                                                             
    > => => exporting layers                                                                                            
    > => => writing image sha256:b57af4e24082f3a30a34c0fe652a336444a3608f76833f5c5fdaf4d81d20c3cc                       
    > => => naming to docker.io/library/pre-receive.debian 
    
  2. 创建一个容器:

    docker create --name pre-receive.debian pre-receive.debian /bin/true
    
  3. 将 Docker 容器导出到 gzip 压缩的 tar 文件:

    docker export pre-receive.debian | gzip > debian.tar.gz
    

    此文件 debian.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 .
    

    Note

    • 请勿在 tar 存档中包含文件的前导目录路径,例如 /path/to/chroot
    • /bin/sh 必须存在并且可执行,作为 chroot 环境的入口点。
    • 与传统的 chroot 不同,预接收挂钩的 chroot 环境不需要 dev 目录。

有关创建 chroot 环境的更多信息,请参阅 Debian Wiki 中的“Chroot”或 Ubuntu 社区帮助 Wiki 中的“BasicChroot”。

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

  1. 在 的右上角,单击你的个人资料照片,然后单击“企业设置”****。

    单击 GitHub Enterprise Server 上的个人资料照片时显示的下拉菜单的屏幕截图。 框出了“企业设置”选项。

  2. 在页面左侧的企业帐户边栏中,单击 设置”。

  3. 在“ 设置”下,单击“挂钩”。

  4. 单击“管理环境”。

  5. 单击“添加环境”。

  6. 在“环境名称”字段中输入所需名称。

  7. 在“从 URL 上传环境”字段中,输入包含环境的 *.tar.gz 文件的 URL。

  8. 单击“添加环境”。

通过管理 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 DebianTestEnv /home/admin/debian.tar.gz
    > Pre-receive hook environment 'DebianTestEnv' (2) has been created.