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

&nbsp

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.

Contacto

¿Te interesan nuestros servicios?

Contáctanos