:::: MENU ::::

Deploy automático de versiones con GIT

3.50 avg. rating (69% score) - 21 votes

Este artículo es parte de una serie de artículos explicando como realizar la gestión de proyecto Web con repositorios GIT. Si quieres leer la serie desde el principio, puedes hacerlo accediendo a: Proyectos Web y repositorios GIT.

Cuando queremos publicar nuevos cambios desde los ordenadores de los desarrolladores al repositorio compartido, normalmente será necesario también llevar dichos cambios bien al servidor de test o al servidor de producción.

Para ello, hasta ahora debíamos entrar al servidor Web mediante SSH, acceder a la carpeta correspondiente de test o producción y ejecutar un git pull de la rama correspondiente.

Podemos evitar dicho paso mediante los Hooks de GIT.

GIT Hooks

Los Hooks en GIT son scripts de línea de comandos que se ejecutan antes o después de las acciones comunes, como git commit, git pull, git push, etc.

Dichos scripts nos permiten por ejemplo publicar automáticamente nuestro proyecto, notificar de la existencia de una nueva versión al equipo de testing, realizar backups antes o después de las actualizaciones y un sinfin de cosas más.

Deploy automático de versiones con GIT

En el caso que nos ocupa, nos gustaría publicar automáticamente en los entornos de producción y test las últimas versiones disponibles de cada una de las ramas de desarrollo.

Para ello utilizaremos el hook post-update, que se ejectura tras un git push y una vez por cada una de las ramas enviadas al servidor.

Para ello, tenemos que editar el archivo:

user@server:/# vim /path/al/repositorio.git/hooks/post-update

Allí podemos comprobar la rama que ha sido actualizada, acceder a la carpeta Web y ejecutar un git pull. Para ello, el contenido del archivo deberá ser similar al siguiente


# El parámetro $1 del script es el nombre del branch actualizado
# Comparamos con master para actualizar el entorno de producción
# y con test para actualizar el entorno de pruebas
case " $1 " in
*'refs/heads/master'*)

        echo "Pulling producción"
        unset GIT_DIR
        cd /var/www/miproyectoweb || exit
        git pull origin master
        ;;
esac

case " $1 " in
*'refs/heads/test'*)

        echo "Pulling pre-producción"
        unset GIT_DIR
        cd /var/www/miproyectoweb/preproduccion || exit
        git pull origin test
        ;;
esac

exec git-update-server-info

Finalmente deberemos asegurarnos que el script es ejecutable, dando los permisos adecuados.

user@server:/# chmod +x /path/al/repositorio.git/hooks/post-update



Hey! Qué opinas sobre el artículo?