Um ambiente de pré-recebimento do GitHub Enterprise Server é um ambiente chroot
do Linux. 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.debian
que 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
Note
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
tar
compactado emgzip
:docker export pre-receive.debian | gzip > debian.tar.gz
Este arquivo
debian.tar.gz
está pronto para ser carregado no dispositivo do GitHub Enterprise Server.
Criar um ambiente de hook pre-receive usando chroot
-
Crie um ambiente
chroot
do Linux. -
Crie um arquivo
tar
compactado emgzip
do diretóriochroot
.cd /path/to/chroot tar -czf /path/to/pre-receive-environment.tar.gz .
Note
- Não inclua os principais caminhos de diretório de arquivos no arquivo TAR, como
/path/to/chroot
. /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
dev
não é necessário para o ambiente chroot em ganchos de pré-recebimento.
- Não inclua os principais caminhos de diretório de arquivos no arquivo TAR, como
Para saber mais sobre como criar um ambiente chroot, confira Chroot no Wiki do Debian ou BasicChroot no Wiki de Ajuda da Comunidade do Ubuntu.
Fazer upload de um ambiente de hook pre-receive no GitHub Enterprise Server
-
No canto superior à direita de GitHub Enterprise Server, clique na sua foto do perfil e clique em Configurações da empresa.
-
Do lado esquerdo da página, na barra lateral da conta empresarial, clique em Configurações.
-
Em " Configurações", clique em Ganchos.
-
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.gz
que contém seu ambiente. -
Clique em Adicionar ambiente.
Fazer upload de um ambiente de hook pre-receive via shell administrativo
-
Carregue um arquivo
*.tar.gz
legí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.gz
para que o arquivo seja legível. -
Conecte-se ao shell administrativo.
-
Use o comando
ghe-hook-env-create
e digite o nome desejado para o ambiente como o primeiro argumento e o caminho local completo ou a URL de um arquivo*.tar.gz
que 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.