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
git
instalada em ambiente local e servidor
Workflow
Git
Versiono meu código no Github e trabalho com, no mínimo, dois branches.
master
web
(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.