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 Alpine Linux e o Docker.
-
Verifique se o Docker está instalado localmente.
-
Crie o arquivo
Dockerfile.alpine
que contém estas informações:FROM alpine:latest RUN apk add --no-cache git bash
-
No diretório de trabalho que contém
Dockerfile.alpine
, compile uma imagem:$ docker build -f Dockerfile.alpine -t pre-receive.alpine . > Sending build context to Docker daemon 12.29 kB > Step 1 : FROM alpine:latest > ---> 8944964f99f4 > Step 2 : RUN apk add --no-cache git bash > ---> Using cache > ---> 0250ab3be9c5 > Successfully built 0250ab3be9c5
-
Crie um contêiner:
docker create --name pre-receive.alpine pre-receive.alpine /bin/true
-
Exporte o contêiner do Docker para um arquivo
tar
compactado emgzip
:docker export pre-receive.alpine | gzip > alpine.tar.gz
Este arquivo
alpine.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 obter mais informações sobre como criar um ambiente chroot, confira Chroot no wiki do Debian, BasicChroot no wiki de Ajuda da Comunidade do Ubuntu ou Installing Alpine Linux in a chroot no wiki do Alpine Linux.
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 AlpineTestEnv /home/admin/alpine.tar.gz > Pre-receive hook environment 'AlpineTestEnv' (2) has been created.