menu
Integración Continua y trabajo en equipo en Pantheon
Introducción
Pantheon es un servicio PAAS (Platform As A Service) para drupal y wordpress, en el que podemos delegar nuestra infraestructura. Además nos da una serie de herramientas como gestión de backups, gestión de despliegues entre entornos, Integración con servicios como New Relic o Apache Solr, etc. Pantheon lo que ofrece para cada uno de nuestros proyectos es alojamiento cloud en containers con 3 entornos (si no tenemos en cuenta el multidev), un repositorio git y 2 interfaces para gestionar todo esto: un panel de control web y una interfaz de línea de comandos para los amantes de la consola llamada terminus
Hasta ahi todo bien, la problemática es que hay una serie de tareas que forman parte del flujo de trabajo de la integración de un cambio sobre el proyecto, y que queremos que estén automatizadas para evitar problemas, y también por comodidad. En nuestro caso tenemos una copia local del proyecto para cada uno de los desarrolladores que participan en el, que hacen cambios, y que los suben a pantheon haciendo git push de sus commits. Asi mismo, los desarrolladores se bajan los cambios del resto del equipo mediante git pull. El proceso para integrar los cambios no termina ahi, ya que necesitamos actualizar la base de datos si es necesario y revertir las features, tanto en nuestros entornos locales de desarrollo, como en el servidor remoto de pantheon. Es esta parte la que queremos automatizar.
1. Nuestro script de actualización
Creamos el siguiente script en la carpeta raíz de nuestro drupal con el nombre post-merge.sh:
#!/usr/bin/env bash
drush updatedb -y
drush fra -y
Guardamos el fichero y le damos permisos de ejecución
chmod +x post-merge.sh
Este es nuestro ejemplo, pero las tareas a realizar pueden variar según el equipo y proyecto.
2. Automatizar tareas en local después de cada pull
Vamos a utilizar un git hook para ejecutar automáticamente el script creado en el paso 1 después de cada pull, concretamente el hook post-merge. Ya que cada pull, contiene un merge, este hook se adapta a nuestras necesidades. Si tras realizar el git pull no hubiera cambios nuevos a integrar, el hook no se invocará. Entramos en la carpeta .git/hooks y creamos un enlace simbólico a nuestro script, con el nombre de enlace post-merge
cd .git/hooks
ln -s ../../post-merge.sh post-merge
Ahora cada vez que hagamos un git pull en local, se ejecutará nuestro script.
3. Automatizar tareas en remoto después de cada push
Para esto vamos a usar el sistema Quicksilver de Webhooks de Pantheon. Este sistema permite configurar acciones en pantheon para que se ejecuten ante determinados eventos. Nosotros vamos a usar el hook sync_code que se invoca al sicronizar el código después de cada push. En esta primera versión de Quicksilver Hooks solo podemos invocar scripts php asi que usaremos un script php como wrapper de nuestro script sh. Lo primero que tenemos que hacer es crear el fichero YAML pantheon.yml en la raíz de nuestro drupal, con el siguiente código:
api_version: 1
workflows:
sync_code:
after:
- type: webphp
description: run updatedb and revert features
script: post-merge.php
Ahora crearemos el fichero post-merge.php en la raíz de nuestro drupal:
<?php
passthru( getcwd() . '/post-merge.sh');
... y le damos permisos de ejecución:
chmod +x post-merge.php
 
Ya tenemos un sistema de integración continua. Este ejemplo es el más simple, pero podemos añadir nuevas acciones como ejecutar tests, notificar el commit a un sistema de gestión de proyectos o de mensajería, etc.
Esperamos que haya sido de utilidad.