Um link foi amplamente divulgado sobre o processo de deploy automático usando git, feito por Thiago Belem.
Abaixo irei mostrar como faço meus deploys e também como é meu workflow, considero um pouco mais simples por lidar com menos configurações do git.
Requisitos
- Conta no Github
- Acesso SSH ao servidor de publicação
- Ter a ferramenta do
gitinstalada em ambiente local e servidor
Workflow
Git
Versiono meu código no Github e trabalho com, no mínimo, dois branches.
masterweb(as vezes)dev
Onde:
O branch master fica com a versão estável do código, bug free.
O branch web, quando uso, fica com a versão atual publicada do projeto, mas na maioria das vezes utilizo o branch master para isso, uma vez que ele tem a versão estável da aplicação. As vezes eu também faço as vezes do ambiente de staging com este branch, publicando seu conteúdo em uma área restrita, para testes.
O branch dev é sempre o atual, onde todo o desenvolvimento é feito depois é feito o merge com o web ou master.
Como faço meu deploy
Temos as informações seguintes:
- Projeto:
Presentations - Domínio:
example.com - Pasta de publicação:
presentations/
Antes de criar um novo branch, vamos criar um arquivo chamado pullTheContent.php (no caso do meu exemplo). O conteúdo deste arquivo deve ser o seguinte:
<?php `git pull`; ?>
Logo após, vamos fazer commit e push das informações.
[local] $ git add .
[local] $ git commit -am "Adicionando arquivo de deploy automático"
Considerando que o repositório git já está instalado e configurado corretamente, com apenas o branch master (que é o padrão), vamos criar o branch dev e configurar tudo.
Para criar o novo branch, faça:
[local] $ git branch dev
Nenhuma mensagem será dada como feedback, isso significa que seu branch foi criado com sucesso.
Para passar do branch master para o dev, você deve fazer:
[local] $ git checkout dev
Então, trabalho neste branch até que esteja pronto para ser considerado pronto.
É quando faço merge do branch master com o dev e faço push.
O próximo passo é criar um Service Hook no site do Github, da seguinte forma:
Acesse seu repositório via Github e clique em Admin (ao lado do nome do repositório)
Depois disso, no menu (do lado direito) existem 4 opções: Options, Collaborators, Service Hooks e Deploy Keys. Clique em Service Hooks e, logo depois, escolha Post-Receive URLs. Preencha o campo URL com a URL do arquivo PHP que criamos acima (que ficará na raiz da aplicação).
Feito isso, acessamos nosso servidor via SSH da seguinte forma:
[local] $ ssh usuario@example.com
Considerando que já está no servidor, vá até a pasta raiz da aplicação e clone o projeto do Github da seguinte forma:
[servidor] $ git clone git@github.com:username/repo.git
Pronto. Já temos o ambiente configurado e, toda vez que você fizer um push com atualizações em seu branch master, o Github irá executar o PHP do servidor, que por sua vez fará automaticamente um git pull, trazendo todas as atualizações.