August 7, 2012

Desplegando cambios con Git

Hace tiempo que venía postergando investigar esto por falta de tiempo y porque pensé que iba a ser un tanto más complicado. La verdad, es muy simple (por lo menos un setup básico) y ahorra muchísimo tiempo.

Si aún estás usando FTP para desplegar aplicaciones/sitios a producción, pará lo que estés haciendo y tomate un rato para subir todo a un repositorio Git y automatizar el proceso. Vale cada segundo invertido. Disclaimer: Esto es una guía básica, hay mil opciones y maneras de cómo configurar esto.

Para esto necesitás:

  • Git instalado en tu máquina y en tu servidor.
  • Acceso SSH a tu servidor.
  • Un repositorio Git con el código a desplegar.

Repositorio Git remoto

Lo primero que hay que hacer es setear un repositorio remoto auxiliar en el servidor. Debería estar fuera del webroot, es decir, sin acceso público.
git init --bare demoproject.git
Con esto creamos un repositorio Git “demoproject.git” vacío.

Git Hook

Luego, la parte fundamental es crear un “hook”. Para esto, creamos un archivo de nombre “post-receive” en el directorio “hooks” del repositorio. En el ejemplo anterior sería: directorio/hacia/repositorios/git/demoproject.git/hooks/post-receive.

El archivo deberá contener las siguientes líneas:

#!/bin/sh GIT_WORK_TREE=/directorio/hacia/webroot/demoproject
git checkout -f

Luego, solo falta setear permisos al archivo:

chmod +x hooks/post-receive

Esa es toda la configuración que hay que hacer en el servidor.

Push con los cambios

Por último, en tu máquina local hay que agregar la referencia al repositorio Git remoto que tenemos en el servidor, al que vamos a hacer push con los cambios que queremos en producción. Yo le llamé “live”.

git remote add live [email protected]:directorio/hacia/repositorios/git/demoproject.git 
git push live +master:refs/heads/master

Listo. Se hizo push del código local hacia el server y luego se hizo checkout hacia el webroot, publicando el sitio con los cambios.

Luego, cuando quieras subir lo último a producción, solo basta ejecutar:
git push live

Notas

Para más información recomiendo leer bien las notas en los artículos aquí abajo. También recomiendo investigar el sistema de branches de Git, para contar por lo menos con un branch de desarrollo y otro con el código que iría en producción.

Fuentes