O DevOps tornou-se um componente integral no mundo do desenvolvimento de software para empresas que tentam simplificar os seus processos de desenvolvimento e implantação. Entre as diversas tecnologias DevOps disponíveis, existe uma que às vezes é negligenciada, mas que é realmente eficaz. Essa tecnologia vital não é outra senão “ ” . Git Hooks” Git Hooks são ótimas ferramentas para automatizar tarefas, impor padrões de codificação, realizar implantações contínuas e executar testes. Vamos ver como podemos usar Git Hooks para revolucionar nossas práticas de DevOps! Comecemos pelo princípio… O que são ganchos? Vejamos primeiro a definição oficial - Ganchos são programas que você pode colocar em um diretório de ganchos para acionar ações em determinados pontos da execução do git. Felizmente, essa é uma definição muito simples! Vamos tentar responder a algumas das questões que os leitores possam ter sobre a definição. P) O que é um diretório Hooks? Onde está localizado? Um diretório hooks é um diretório em um repositório Git que contém programas executáveis ou Hooks que o Git irá executar. Por padrão, o diretório de hooks é . Os usuários também podem configurá-lo usando a variável de configuração . $GIT_DIR/hooks core.hooksPath P) Quais são os pontos de execução do Git? Os pontos de execução do Git são etapas no fluxo de trabalho do Git nas quais os ganchos podem ser executados. Pré-commit, Pós-commit, Pré-push, Pós-recebimento, Pré-rebase e Pós-mesclagem são alguns exemplos de pontos de execução do Git. Para resumir esta seção, podemos ter a seguinte definição para Git Hooks - O Git executa scripts conhecidos como “hooks” antes ou depois de operações específicas, como commit, push ou mesclagem de código. diretório do seu repositório Git Eles permitem automatizar tarefas, aplicar políticas e interagir com a base de código durante o processo de desenvolvimento. Os ganchos Git são armazenados no .git/hooks Criando nossos primeiros Git Hooks! Vamos tentar construir um gancho Git simples que imponha a expressão regular "TASK*" em qualquer mensagem de commit. Crie um novo diretório e inicialize um novo repositório git dentro dele. git_hooks_tut ~/projects$ mkdir git_hooks_tut ~/projects$ cd git_hooks_tut ~/projects/git_hooks_tut$ git init Initialized empty Git repository Vamos entrar no diretório hooks e investigar seu conteúdo. ~/projects/git_hooks_tut$ cd .git/hooks ~/projects/git_hooks_tut/.git/hooks$ ls applypatch-msg.sample pre-applypatch.sample pre-push.sample commit-msg.sample pre-commit.sample pre-rebase.sample fsmonitor-watchman.sample pre-merge-commit.sample pre-receive.sample post-update.sample prepare-commit-msg.sample update.sample O diretório hooks vem com alguns scripts de amostra. A extensão impede sua execução por padrão. Tudo que você precisa fazer para "instalar" um gancho é se livrar da extensão . .sample .sample Ou, se estiver começando do zero com um novo script, você pode simplesmente adicionar um novo arquivo com um nome que corresponda a um dos nomes de arquivo listados acima, mas sem a extensão . .sample Para nosso caso de uso, precisaremos de um gancho commit-msg. Vá em frente e crie um novo script chamado . commit-msg ~/projects/git_hooks_tut/.git/hooks$ touch commit-msg Vamos adicionar a lógica para garantir nosso padrão de mensagem de commit ao script . commit-msg #!/bin/sh commit_msg_file=$1 commit_msg=$(cat "$commit_msg_file") # Check if the commit message starts with "TASK" if ! echo "$commit_msg" | grep -q "^TASK"; then echo "Commit message must start with 'TASK'" exit 1 fi Por último, torne o script executável. Scripts não executáveis são ignorados pelo git mesmo se estiverem presentes no diretório hooks. commit-msg ~/projects/git_hooks_tut/.git/hooks$ chmod +x commit-msg E com essa configuração, nossos ganchos estão completos! Vamos testar agora. Agora criaremos um novo arquivo e tentaremos enviá-lo; primeiro, com um formato de mensagem inválido e depois com um formato de mensagem válido. ~/projects/git_hooks_tut/.git/hooks$ cd ../.. ~/projects/git_hooks_tut$ touch README ~/projects/git_hooks_tut$ ls README ~/projects/git_hooks_tut$ git add README ~/projects/git_hooks_tut$ git commit -m "Added Readme File" Commit message must start with 'TASK' ~/projects/git_hooks_tut$ git commit -m "TASK-0000: Added Readme File" [master (root-commit) 7f3648a] TASK-000: Added Readme File As coisas estão funcionando idealmente! Quais são alguns tipos diferentes de ganchos disponíveis? O Git nos permite criar ganchos para vários pontos de execução. Alguns deles são os seguintes - Este gancho é executado antes de um commit ser criado. Isso nos permite validar as alterações que estão sendo confirmadas. Pre-Commit Hook: O gancho de pré-recebimento é executado no repositório remoto antes de qualquer referência ser modificada, permitindo que você aplique regras ou políticas personalizadas. Gancho de pré-recebimento: Este gancho também é executado no repositório remoto após a atualização das referências. Ele pode ser usado para enviar notificações e/ou realizar tarefas adicionais. Gancho Pós-Recebimento: Este gancho é executado antes de um push ser feito. Isso pode ser usado para impor certas políticas que desencorajam o envio de certos tipos de commits. Pre-Push Hook: O gancho prepare-commit-msg é executado após a criação de uma mensagem de commit, permitindo que você modifique ou aprimore a mensagem de commit. Gancho Prepare-Commit-Msg: Existem vários outros ganchos presentes para personalizar melhor o Git, eles podem ser encontrados em . Git docs Os ganchos Git, se usados corretamente, são uma ferramenta de grande potencial! Nós, os desenvolvedores, frequentemente prejudicamos a força de tais ferramentas que poderiam resolver muitas tarefas complexas. Empregar Git Hooks aprimora o DevOps em qualquer nível pode ser uma ótima maneira para organizações que buscam integrar o DevOps em seus ciclos de desenvolvimento. Parabéns por chegar até aqui! Espero que você tenha aprendido algo novo hoje.