Skip to main content

Criar um ambiente de hook pre-receive

Para executar hooks pre-receive, use o ambiente pre-receive padrão ou crie um ambiente personalizado.

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.

  1. Verifique se o Docker está instalado localmente.

  2. 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
    

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.

  1. 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
    
  2. Crie um contêiner:

    docker create --name pre-receive.debian pre-receive.debian /bin/true
    
  3. Exporte o contêiner do Docker para um arquivo tar compactado em gzip:

    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

  1. Crie um ambiente chroot do Linux.

  2. Crie um arquivo tar compactado em gzip do diretório chroot.

    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.
    • /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.

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

  1. No canto superior à direita de GitHub Enterprise Server, clique na sua foto do perfil e clique em Configurações da empresa.

    Captura de tela do menu suspenso mostrado quando você clica no foto de perfil no GitHub Enterprise Server. A opção "Enterprise settings" está contornada.

  2. Na parte superior da página, clique em Configurações.

  3. Em " Configurações", clique em Ganchos.

  4. Clique em Gerenciar ambientes.

  5. Clique em Adicionar ambiente.

  6. No campo "Nome do ambiente", insira o nome desejado.

  7. No campo "Carregar ambiente de uma URL", insira a URL do arquivo *.tar.gz que contém seu ambiente.

  8. Clique em Adicionar ambiente.

Fazer upload de um ambiente de hook pre-receive via shell administrativo

  1. 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 de scp. Quando scp é usado, talvez seja necessário ajustar as permissões do arquivo *.tar.gz para que o arquivo seja legível.

  2. Conecte-se ao shell administrativo.

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