Deployment para Web Apps con GIT

La meta de este post es explicar como hacer deployment de un web app con un solo comando como:

$ git push production

Una vez entrado este comando, el repositorio local envia las diferencias a la copia del repositorio en el servidor de producción y un script de post-update se encarga de actualizar esta copia. Listo un deployment automatizado. Lo mejor de todo es que si haces cambios en cualquiera de los dos lados facilmente puedes reconciliar los cambios en ambos lados. Esta misma estrategia se puede utilizar con varios servidores. Por ejemplo:

$git push staging

$git push client-testing

Supongo que queda clara la idea. Así que ahora el proceso paso a paso de como hacerlo.

Voy a partir de la premisa de que estás usando github pero eso se podría hacer de igual manera con cualquier otro servicio o sin usar ninguno de estos servicios.

  1. Crea un repositorio en GitHub y haz un clone a tu sistema local
    $git clone [email protected]:USERNAME/reponame.git
     
  2. Entra por ssh a tu server y haz un clone del repo al directorio donde deben estar los files recuerda que el punto al final de comando es importante para que git ponga los files en el directorio que estas sin crear uno nuevo.
    $git clone [email protected]:USERNAME/reponame.git .
      
  3. Una vez “clonado” el repo en tu server de producción debes editar el file que se llama .git/hooks/post-update. Borra todo el contenido de este archivo y sustituye con este file. Despues de eso debes añadir permisos para ejecutar ese archivo.
    $chmod +x post-update
      
  4. Ahora en tu sistema local debes añadir como un “remote” al repositorio que está en tu servidor de producción.
    $git remote add production [email protected]:/full/path/to/repo
      
  5. Una vez hagas esto ya podrás hacer
    $git push production

Debe hacer una aclaración para que esto funcione debes haber crear key pairs de ssh para poder entrar a tu servidor remoto sin usar passwords. Hace un tiempo hice un blog post sobre eso que podría ayudar. 

Si algo no queda claro no duden en dejar comentarios abajo.