paint-brush
Turbine seu DevOps com Git Hookspor@infinity
2,992 leituras
2,992 leituras

Turbine seu DevOps com Git Hooks

por Rishabh Agarwal4m2023/09/07
Read on Terminal Reader

Muito longo; Para ler

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 nada mais é do que “Git Hooks”.
featured image - Turbine seu DevOps com Git Hooks
Rishabh Agarwal HackerNoon profile picture

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 é $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

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 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!

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 -


  1. Pre-Commit Hook: Este gancho é executado antes de um commit ser criado. Isso nos permite validar as alterações que estão sendo confirmadas.


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


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


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


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