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

  1. Conta no Github
  2. Acesso SSH ao servidor de publicação
  3. Ter a ferramenta do git instalada em ambiente local e servidor

### Workflow #### Git Como dito no post O Que Uso, versiono meu código no Github e trabalho com, no mínimo, dois branches.

  1. master
  2. web (as vezes)
  3. 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)

Tela do projeto no Github

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

Configuração do hook

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.