[vc_row][vc_column][vc_column_text]Recentemente fiz um post sobre a má prática de deixar a pasta .git na área pública da hospedagem e recebi bastante críticas construtivas com relação à soluçãogambiarra que apresentei para resolver o problema. Dentre as críticas vieram também sugestões das maneiras mais corretas de se resolver este problema. A maneira que acreditei ser a mais simples foi com Git Hooks e é sobre isso que falarei aqui.
Procurando por "deploy com git hooks" no Google, de 10 resultados, 9 são em inglês e essa foi a motivação para escrever este post. Utilizei como base o artigo em inglês que o Caio Vaccaro criou para a Digital Ocean.
Mas antes de colocar a mão na massa, você precisa entender um pouco do conceito e avaliar se este processo é válido ou não para o seu cenário.
$ mkdir git-hooks $ cd git-hooks $ git initNo comando acima criei uma pasta chamada git-hooks, entrei na mesma e inicializei o git. Agora adicionarei um arquivo chamado index.html com o seguinte conteúdo.
<html> <head> <meta charset="utf-8"> </head> <body> <h1>Página de exemplo</h1> </body> </html>Em seguida, o adicionarei no git e darei o primeiro commit. De momento ainda nada de push, somente o commit mesmo.
$ git add index.html $ git commit -m "Added first file"
/home/subdominios/githooks.andrebian.com/wwwOnde www é a pasta pública de minha aplicação. A imagem mostra a estrutura completa da pasta do site. Aqui será criada uma pasta chamada repo.git. Após criar a pasta, entrarei na mesma e iniciarei o git, mas aí tem uma pequena diferença do que foi apresentado na parte 1 e esta diferença será explicada a seguir.
$ mkdir repo.git $ cd repo.git $ git init --barePerceba que logo após o git init existe a opção --bare. Esta opção serve para informar que a pasta não conterá nosso código-fonte, mas sim, apenas o versionamento. Ah, não é obrigatório a pasta conter o sufixo .git (como neste caso repo.git) no entanto é mais por questão de padronização de nomenclatura que a defini desta forma. Veja como foi o processo. Percebeu que na imagem existe uma pasta chamada hooks? É para ela que vamos agora!
$ cd hooksApós estar na pasta, crie um arquivo chamado post-receive com conteúdo similar ao que apresento abaixo. Altere os endereços para a sua necessidade.
#!/bin/sh #Destino (área pública) #Local do controle de versão git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -fNo meu exemplo, ficou assim: E o último item a ser realizado neste passo é aplicar a permissão para execução no arquivo post-receive.
$ chmod +x post-receiveO que foi feito até aqui foi registrar um gatilho que sempre quando receber um push garantirá que os arquivos necessários estarão presentes na pasta em que nossa aplicação Live está rodando. Para efeito de teste, mostro como de momento nada ainda foi enviado para o servidor. Acessando https://githooks.andrebian.com o resultado é a página padrão do meu cloud.
$ git remote add live ssh://user@host/home/user/githooks.andrebian.com/repo.gitAltere o endereço para a sua necessidade. O resultado do comando git remote -v deve conter um remote chamado live, como na imagem abaixo. Caso o resultado contenha um remote chamado live, pode prosseguir, senão, retorne e verifique o que pode ter ocorrido de errado.
$ git push live masterSe tudo ocorreu bem, é para neste momento nosso simples html já estar no ar!
<html> <head> <meta charset="utf-8"> <title>Exemplo de deploy com Git Hooks</title> <style> body {text-align: center; font-family: Cantarell, 'sans-serif';} h1 {color: #724170;} hr {color: #eee;} a {text-decoration: none;color: #724170;} a.btn:hover {background-color: #724170;color: #fff;} .btn {text-transform: uppercase;font-size: 16px;font-weight: 600;line-height: 2.8;border-radius: 0.3em;letter-spacing: 0em;box-shadow: 0 0em 0em rgba(0,0,0,0.18);border: #724170 solid 2px;text-decoration: none;padding: 5px;} </style> </head> <body> <a href="https://www.andrebian.com"> <img src="https://www.andrebian.com/wp-content/uploads/2017/12/logo-andrebian-horizontal-fundo-transparente-full.png"> </a> <hr> <br /> <h1>Deploy com Git Hooks</h1> Esta página é o resultado do artigo sobre deploy com Git Hooks, leia o mesmo para entender como chegamos aqui. <br /> <br /> <a href="https://www.andrebian.com/deploy-com-git-hooks" class="btn">Ler o artigo</a> </body> </html>Agora o commit, push e tudo está no ar!
$ git add index.html $ git commit -m "Added more info" $ git push live masterO resultado: