Sobre hooks pre-receive
Quando ocorre um push, cada script é executado em um ambiente isolado e pode executar verificações no conteúdo do push. Os scripts farão o push ser aceito se o status de saída for 0, ou farão o push ser rejeitado se o status de saída for diferente de zero.
Use os hooks pre-receive para cumprir com as regras corporativas, aplicar a conformidade regulamentar e evitar certos erros comuns.
Exemplos de uso dos hooks pre-receive:
- Exigir que as mensagens de commit sigam determinado padrão ou formato, como incluir um número de ticket válido ou ter um tamanho especificado;
- Bloquear um branch ou repositório rejeitando todos os pushes;
- Evitar a inclusão de dados confidenciais no repositório bloqueando palavras-chave, padrões ou tipos de arquivos.
- Evite que o autor da solicitação de pull mescle suas próprias alterações.
Veja exemplos de ganchos de pré-recebimento do GitHub Enterprise Server no repositório github/platform-samples.
Fluxos de trabalho e impacto no desempenho
O impacto para os desenvolvedores e seus fluxos de trabalho pode ser significativo e deve ser considerado atentamente. Hooks pre-receive baseados nas demandas corporativas e implementados com cuidado trarão mais benefícios para a organização como um todo.
Os ganchos de pré-recebimento podem ter efeitos indesejados no desempenho do sua instância do GitHub Enterprise Server e devem ser implementados e analisados com atenção.
Devido ao risco de falha e ao impacto no desempenho para todos os usuários da instância, recomendamos seguir as instruções abaixo.
- Evite solicitações de API em um gancho de recebimento prévio. Especificamente, desencorajamos fortemente que faça solicitações a serviços externos, o que pode demorar mais tempo e agravar o impacto no desempenho.
- Evite operações Git com execução prolongada em um gancho de recebimento prévio. Se o seu gancho de recebimento prévio executar operações Git em repositórios grandes ou ocupados, o Git e o desempenho geral da instância poderão ser afetados negativamente.
Observação
Para evitar a rejeição de um push devido a um tempo limite, todos os hooks de pré-recebimento combinados devem ser executados em menos de cinco segundos.
Tempos limite de gancho de pré-recebimento
Os ganchos de pré-recebimento em GitHub Enterprise Server têm um orçamento de tempo de execução fixo de 5 segundos (compartilhado entre todos os ganchos). Este é um projeto intencionalmente elaborado para evitar o esgotamento de recursos por ganchos de longa execução e impedir que scripts fora de controle bloqueiem as operações do repositório indefinidamente.
Todos os ganchos de pré-recebimento para um repositório compartilham um orçamento de tempo limite acumulado:
- Se o gancho A levar 3 segundos, o gancho B terá 2 segundos restantes (do padrão de 5 segundos)
- Se o gancho A expirar após 5 segundos, o gancho B nunca será executado
Importante
Os tempos limite de gancho de pré-recebimento são tratados de forma distinta de códigos de saída:
**Códigos de saída**: a configuração de imposição é respeitada (ganchos não aplicados não bloqueiam pushes)
**Tempos limite**: o push pode falhar com qualquer configuração de imposição
Comportamento de tempo limite
| Scenario | Aplicação = habilitada | Aplicação = desabilitada/teste |
|---|---|---|
| Código de saída ≠ 0 | Push rejeitado | O push continua (aviso somente) |
| Tempo limite excedido | Push rejeitado | Aviso: push ainda pode falhar |