Cómo configurar la implementación automática con Git y un VPS

Introducción

Este artículo te enseñará cómo usar Git cuando desees implementar tu aplicación. Si bien hay muchas maneras de usar Git para implementar nuestra aplicación, este tutorial se centrará en la más sencilla. Partimos de la premisa que ya sabes cómo crear y utilizar un repositorio en tu máquina local.

Cuando usas Git, el flujo de trabajo generalmente es solo para el control de versiones. Tienes un repositorio local donde trabajas y un repositorio remoto donde mantienes todo sincronizado y puedes trabajar con un equipo y diferentes máquinas. Pero también puedes usar Git para mover tu aplicación a producción.

Configuración del servidor

Nuestro espacio de trabajo ficticio:

El directorio “live” de tu servidor: /var/www/domain.com

El repositorio de tu servidor: /var/repo/site.git

¿Qué debemos hacer si queremos enviar a site.git y al mismo tiempo hacer que todo el contenido esté disponible en /var/www/domain.com?

Creando nuestro repositorio

Debes iniciar sesión en tu VPS desde la línea de comandos y escribir lo siguiente:

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

—bare significa que nuestra carpeta no tendrá archivos de origen, solo el control de versión.

Hooks

Los repositorios de Git tienen una carpeta llamada  Hooks’. Esta carpeta contiene algunos archivos de muestra para posibles acciones que puedes enlazar y realizar acciones personalizadas configuradas por ti.

La documentación de Git define tres posibles enlaces de servidor:  ‘pre-receive’, ‘post-receive’ and ‘update . ‘Pre-receive’ se ejecuta tan pronto como el servidor recibe una ‘inserción’‘ update’ es similar pero se ejecuta una vez para cada rama, y ​​‘post-receive’  se ejecuta cuando una ‘inserción’ finaliza por completo y es el que nos interesa.

En nuestro repositorio si escribes:

ls

Verás algunos archivos y carpetas, incluida la carpeta ‘hooks’ . Así que vamos a la carpeta ‘hooks’ :

cd hooks

Ahora, crea el archivo ‘post-receive’ escribiendo:

cat> post-receive

Cuando ejecutes este comando, tendrás una línea en blanco que indica que todo lo que escribas se guardará en este archivo. Así que vamos a escribir:

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

Cuando termines de escribir, presiona ‘control-d’ para guardar. Para ejecutar el archivo, necesitamos establecer los permisos adecuados utilizando:

chmod +x post-receive

Puedes ver en la documentación que ‘git-dir’ es la ruta al repositorio. Con ‘work-tree’ , puedes definir una ruta diferente a donde se transferirán realmente tus archivos.

El archivo ‘post-receive’  se revisará cada vez que se complete un envío y dice que tus archivos deben estar en /var/www/domain.com.

Máquina local

Vamos a crear nuestro repositorio local. Debes cambiar la ruta y el nombre a lo que elijas. Si estás en un VPS, simplemente escribe:

exit

Y crea tu repo:

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

Entonces necesitamos configurar la ruta remota de nuestro repositorio. Dile a Git que agregue un remoto llamado ‘live’:

git remote add live ssh://[email protected]/var/repo/site.git

Aquí deberíamos dar el enlace del repositorio y no la carpeta “live”

Supongamos que tenemos un gran trabajo listo en esta carpeta. Deberíamos hacer los pasos habituales de agregar los archivos y confirmar con un mensaje:

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

Solo para recordar, el punto después de ‘git add’ significa que estás agregando todos los archivos al escenario. Después de ‘git commit’ tenemos ‘-m’, lo que significa que escribiremos un mensaje. Para completar, simplemente ’empujamos’ todo al servidor. Usamos el alias ‘live’ que usamos cuando configuramos el remoto.

git push 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://[email protected]/var/repo/site.git* [new branch]      master -> master

Aquí le decimos a Git que presione el remoto ‘live’ en la rama ‘maestra’.

Beta

¿Qué sucede si no deseas implementar todo en un solo paso? Tal vez quieras probarlo primero y tener un directorio beta.

Una de las formas de hacerlo es crear otro repositorio. Volvamos a iniciar sesión en nuestro VPS y creamos nuestro directorio:

cd /var/www/
mkdir beta

Para crear nuestro repositorio:

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

Una vez más, deberíamos crear el archivo ‘post-receive’ porque queremos ver nuestro proyecto en el directorio beta:

cd hooks
cat > post-receive

Escribe el contenido del archivo:

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

Cuando termines de escribir, presiona ‘control-d’ para guardar. Para ejecutar el archivo, necesitamos establecer los permisos adecuados utilizando:

chmod +x post-receive

Volvamos a nuestro repositorio local:

exit
cd /my/workspace/project

Así que ahora podemos configurar otro remoto apuntando a nuestro repositorio beta:

git remote add beta ssh://[email protected]/var/repo/beta.git

Con esto, podemos tener un proceso de dos pasos. Primero presionamos para beta y probar, y si todo está bien, presionamos para live:

git add .
git commit -m "New version"
git push beta master

Y después:

git push live master

En vivo desde el servidor

Tal vez tengas un equipo trabajando en el mismo proyecto y desees que otros también puedan decidir que es hora de empezar a funcionar. Para hacer esto, podemos vincular beta y el repositorio live en el servidor. Inicia sesión en tu VPS y escribe:

cd /var/repo/beta.git
git remote add live ../site.git

Así que ahora puedes pasar de beta a live en el servidor:

cd /var/repo/beta.git
git push live master

¡Felicidades! ¡Tu VPS ahora está configurado para implementarse automáticamente con Git!