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!
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 é $GIT_DIR/hooks
. Os usuários também podem configurá-lo usando a variável de configuração 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. 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 diretório
.git/hooks
do seu repositório Git
Vamos tentar construir um gancho Git simples que imponha a expressão regular "TASK*" em qualquer mensagem de commit.
Crie um novo diretório git_hooks_tut
e inicialize um novo repositório git dentro dele.
~/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 .sample
impede sua execução por padrão. Tudo que você precisa fazer para "instalar" um gancho é se livrar da extensão .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 commit-msg
executável. Scripts não executáveis são ignorados pelo git mesmo se estiverem presentes no diretório hooks.
~/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!
O Git nos permite criar ganchos para vários pontos de execução. Alguns deles são os seguintes -
Pre-Commit Hook: Este gancho é executado antes de um commit ser criado. Isso nos permite validar as alterações que estão sendo confirmadas.
Gancho de pré-recebimento: 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 Pós-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.
Pre-Push Hook: 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.
Gancho Prepare-Commit-Msg: 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.
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.