Um ambiente de pré-recebimento do GitHub Enterprise Server é um ambiente Linux chroot. Como são executados em todos os eventos de push, os hooks pre-receive devem ser rápidos e leves. Em geral, o ambiente necessário para tais verificações é mínimo.
O GitHub Enterprise Server fornece um ambiente padrão que inclui estes pacotes: awk, bash, coreutils, curl, find, gnupg, grep, jq e sed.
Se você tiver um requisito específico que não é atendido por esse ambiente, como suporte para uma linguagem específica, crie e carregue seu ambiente chroot do Linux de 64 bits.
A versão do Git usada no ambiente de gancho de pré-recebimento deve ser pelo menos 2.11 ou, se você estiver usando libgit2, você deve usar pelo menos a versão 0.18.
Se você estiver usando outra implementação do Git, ela deverá dar suporte a caminhos relativos no arquivo info/alternates.
Criar um ambiente de hook pre-receive usando o Docker
Você pode usar uma ferramenta de gerenciamento de contêineres do Linux para criar um ambiente de hook pre-receive. Este exemplo usa o Debian Linux e o Docker.
-
Verifique se o Docker está instalado localmente.
-
Crie o arquivo
Dockerfile.debianque contém estas informações: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
Observação
A imagem de Debian inclui alguns links simbólicos por padrão, que, se não forem removidos, poderão causar erros durante a execução de scripts no ambiente personalizado. Os links simbólicos são removidos na última linha do exemplo acima.
-
No diretório de trabalho que contém
Dockerfile.debian, compile uma imagem:$ 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 -
Crie um contêiner:
docker create --name pre-receive.debian pre-receive.debian /bin/true -
Exporte o contêiner do Docker para um arquivo
gzipcompactadotar.docker export pre-receive.debian | gzip > debian.tar.gzEste arquivo
debian.tar.gzestá pronto para ser carregado no dispositivo do GitHub Enterprise Server.
Criar um ambiente de hook pre-receive usando chroot
-
Crie um ambiente
chrootdo Linux. -
Crie um arquivo
gzipcompactadotardo diretóriochroot.cd /path/to/chroot tar -czf /path/to/pre-receive-environment.tar.gz .Observação
- Não inclua os principais caminhos de diretório de arquivos no arquivo TAR, como
/path/to/chroot.
- Não inclua os principais caminhos de diretório de arquivos no arquivo TAR, como
/bin/sh precisa existir e ser executável, como o ponto de entrada no ambiente chroot.
- Ao contrário dos chroots tradicionais, o diretório
devnão é necessário para o ambiente chroot em ganchos de pré-recebimento.
Para obter mais informações sobre como criar um ambiente chroot, confira Chroot do Wiki do Debian.
Fazer upload de um ambiente de hook pre-receive no GitHub Enterprise Server
- No canto superior à direita do GitHub Enterprise Server, clique na sua imagem do perfil e clique em Configurações da empresa.
- Na parte superior da página, clique em Settings.
- Em " Settings", clique em Hooks.
- Clique em Gerenciar ambientes.
- Clique em Adicionar ambiente.
- No campo "Nome do ambiente", insira o nome desejado.
- No campo "Carregar ambiente de uma URL", insira a URL do arquivo
*.tar.gzque contém seu ambiente. - Clique em Adicionar ambiente.
Fazer upload de um ambiente de hook pre-receive via shell administrativo
-
Carregue um arquivo
*.tar.gzlegível que contém seu ambiente em um host da Web e copie a URL ou transfira o arquivo para o dispositivo do GitHub Enterprise Server por meio descp. Quandoscpé usado, talvez seja necessário ajustar as permissões do arquivo*.tar.gzpara que o arquivo seja legível. -
Conecte-se ao shell administrativo.
-
Use o comando
ghe-hook-env-createe digite o nome desejado para o ambiente como o primeiro argumento e o caminho local completo ou a URL de um arquivo*.tar.gzque contém o ambiente como o segundo argumento.admin@ghe-host:~$ ghe-hook-env-create DebianTestEnv /home/admin/debian.tar.gz > Pre-receive hook environment 'DebianTestEnv' (2) has been created.