git

Deploy con git en un solo paso

Todos los que nos dedicamos al desarrollo web y utilizamos git en nuestro día a día nos hemos hecho esta pregunta alguna vez, y es, ¿como podemos hacer un despliegue con git de nuestros cambios sobre nuestro proyecto en remoto, sin tener que hacer git push, conectar a la máquina en remoto, y hacer git pull? Pues bien, en este artículo intentaré explicar de manera breve la idea de como hacer esto de tal manera que desde local hagamos git push y todo lo demás se lanze de manera automática.

Para este ejemplo tenemos que tener en cuenta que ya existe un repo con git en local del proyecto.

Primero preparamos el terreno, ¿que necesitamos?

  • Repo del proyecto en local
  • Repo del proyecto en remoto
  • Repo configurado en bare en remoto (en este ejemplo lo alojamos en la misma máquina remota)

Paso 1. Configuramos bare

Accedemos por ssh a nuestra máquina remota y lanzamos algo como:

mkdir /git/proyecto.git
cd /git/proyecto.git
git --bare init

Paso 2. Añadimos remoto en local y en servidor

En este punto lo que hacemos es conectar local y remoto con el bare anterior.

Desde local lanzariamos algo así como

cd /www/proyecto
git remote add deploy usuario@servidor:/git/proyecto.git

Y desde remoto en nuestro servidor, que previamente conectamos a través de ssh, actuamos de la siguiente forma:

cd /www/proyecto
git remote add deploy /git/proyecto.git

De esta manera el repo en bare está comunicado con local y remoto.

Paso 3. Configuramos el hook para el bare

Nos vamos al servidor, y vamos donde está alojado nuestro bare, hacemos algo así como:

cd /git/proyecto.git
cp hooks/post-update.sample hooks/post-update

Y reemplazamos el contenido del hook con algo como lo siguiente:

#!/bin/sh
unset GIT_DIR && cd /www/proyecto && git pull deploy master

Paso 4. Funcionamiento

Ahora para probarlo, tenemos que realizar un commit en local y lanzar el comando siguiente:

git push deploy master

Esto lanzará el hook, el hook se situará en la carpeta del proyecto en remoto y lanzará el pull para el bare llamado deploy en la rama master, por lo que automáticamente se actualizará el repositorio de nuestro servidor.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.