Como configurar a implantação automática com Git com um VPS

Introdução

Para uma introdução ao Git e como instalar, consulte o tutorial de introdução.

Este artigo ensinará como usar o Git quando quiser implantar seu aplicativo. Embora existam muitas maneiras de usar o Git para implantar nosso aplicativo, este tutorial se concentrará na mais direta. Presumo que você já saiba como criar e usar um repositório em sua máquina local. Caso contrário, consulte este tutorial.

Quando você usa o Git, o fluxo de trabalho geralmente é voltado apenas para o controle de versão. Você tem um repositório local onde trabalha e um repositório remoto onde mantém tudo sincronizado e pode trabalhar com uma equipe e máquinas diferentes. Mas você também pode usar o Git para mover seu aplicativo para produção.

Configuração do Servidor

Nosso espaço de trabalho fictício:

O diretório ao vivo do seu servidor: /var/www/domain.com

Seu repositório do servidor: /var/repo/site.git

O que devemos fazer se quisermos enviar para site.git e ao mesmo tempo disponibilizar todo o conteúdo em /var/www/domain.com?

Criando nosso repositório

Faça login no seu VPS a partir da linha de comando e digite o seguinte:

cd /var && mkdir repo && cd repo && mkdir site.git && cd site.git && git init --bare

--bare significa que nossa pasta não terá arquivos de origem, apenas o controle de versão.

Hooks

Os repositórios Git têm uma pasta chamada 'hooks'. Esta pasta contém alguns arquivos de amostra para possíveis ações que você pode conectar e executar ações personalizadas definidas por você.

A documentação do Git define três ganchos de servidor possíveis: 'pré-receber', 'pós-receber' e 'atualizar'. 'Pré-recebimento' é executado assim que o servidor recebe um 'push', 'atualização' é semelhante, mas é executado uma vez para cada ramificação, e 'pós-recebimento' é executado quando um 'push' é completamente finalizado e é o um em que estamos interessados.

Em nosso repositório, se você digitar:

ls

Você verá alguns arquivos e pastas, incluindo a pasta 'hooks'. Então vamos para a pasta 'hooks':

cd hooks

Agora, crie o arquivo 'post-receive' digitando:

cat > post-receive

Ao executar este comando, você terá uma linha em branco indicando que tudo o que você digitar será salvo neste arquivo. Então vamos digitar:

#!/bin/sh 
git --work-tree=/var/www/domain.com --git-dir=/var/repo/site.git checkout -f

Quando terminar de digitar, pressione 'control-d' para salvar. Para executar o arquivo, precisamos definir as permissões apropriadas usando:

chmod +x post-receive

Você pode ver na documentação que 'git-dir' é o caminho para o repositório. Com 'árvore de trabalho', você pode definir um caminho diferente para onde seus arquivos serão realmente transferidos.

O arquivo 'post-receive' será analisado toda vez que um push for concluído e está dizendo que seus arquivos precisam estar em /var/www/domain.com.

Local Machine

Vamos criar nosso repositório local. Você deve alterar o caminho e o nome para o que você escolher. Se você estiver em um VPS, basta digitar:

exit

E crie seu repo:

cd /my/workspace && mkdir project && cd project && git init

Então precisamos configurar o caminho remoto do nosso repositório. Diga ao Git para adicionar um controle remoto chamado 'live':

git remote add live ssh://user@mydomain.com/var/repo/site.git

Aqui devemos dar o link do repositório e não a pasta live.

Vamos supor que temos um ótimo trabalho pronto nesta pasta. Devemos seguir os passos usuais de adicionar os arquivos e confirmar com uma mensagem:

git add . && git commit -m "My project is ready"

Só para lembrar, o ponto após 'git add' significa que você está adicionando todos os arquivos ao stage. Depois de 'git commit', temos '-m', o que significa que digitaremos uma mensagem. Para completar, basta 'empurrar' tudo para o servidor. Usamos o alias 'ao vivo' que usamos ao configurar o controle remoto.

git push --set-upstream live master
Counting objects: 7, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 10.56 KiB, done.
Total 7 (delta 0), reused 0 (delta 0)To ssh://user@mydomain.com/var/repo/site.git* [new branch] master -> master

Aqui, dizemos ao Git para enviar para a branch remota 'live' na ramificação 'master'.

Did you find this article valuable?

Support Luan Rodrigues by becoming a sponsor. Any amount is appreciated!