Drone.io, Integración Continua en unos cuantos pasos

Les quiero compartir lo fácil y sencillo que es usar Drone.io para Integración Continua (CI) de su proyecto.

En este caso lo usé como prueba en un repositorio donde se está gestando la v2 del portal de javaMexico.org, el cuál está en Github: https://github.com/javamexico/javamexico.org

Drone.io se integra automáticamente con tres servicios tanto para hacer login como para obtener el código de los proyectos que quieras construir:

  • Github
  • Bitbucket
  • Google Code

Esto es ventaja y desventaja, ya que es extremádamente fácil configurar un proyecto que esté en cualquiera de esas tres opciones, pero si tu proyecto no está en alguna de ellas Drone.io (al momento) no lo podrá construir.

La cuenta gratuita permite dar de alta cualquier cantidad de repositorios siempre y cuando sean públicos (proyectos de código libre), de lo contrario se puede adquirir un plan para repositorios privados.

Configuración

Como les decía, el primer ejemplo que hice fue sobre el repositorio de la v2 de javaMéxico, el cuál es un proyecto Grails.

1. Antes que otra cosa, Drone.io te pedirá enlazar tu cuenta de Github o Bitbucket para poder acceder a los repositorios que tienes ahí.

2. Para dar de alta un proyecto selecciona "New Project" y elige el servicio en el que está el repositorio:

3. Después de esto se mostrará la lista de repositorios a elegir para que los construya Drone.io

4. Al elegir un proyecto, Drone.io nos preguntará en qué plataforma se va a construir. Al momento Drone.io soporta las siguientes:

Aquí es donde pude ver que cuenta con soporte para Groovy, y pensé que naturalmente tendría soporte para Grails pero no es así.

5. Una vez que elegimos la plataforma, Drone.io nos pregunta por un "build script", que es la serie de comandos para construir nuestra aplicación. Aquí podemos ingresar comandos de *NIX como si estuviéramos ejecutando directamente en la consola después de obtener el código del proyecto, es aquí donde haríamos que se ejecuten los tests y la construcción del proyecto.

Al no soportar Grails, pensé en Grails Wrapper, que permite levantar una aplicación sin necesidad de que Grails esté instalado en el sistema. Integré Grails Wrapper al proyecto en Github y listo, mi build script se resumió a tan solo:

 

6. El siguiente paso es la configuración del proyecto con mayor detalle. Aquí es donde podemos configurar:

  • Base de datos de la aplicación (de entre MySQL, PostgreSQL, MongoDB, Memcache, Redis)
  • Variables de entorno
  • Notificaciones en cada build
  • Path de artefactos que cree nuestra aplicación (para que puedan ser descargados desde la página de cada build)
  • Configuración de despliegue a servicios externos

Este último punto es extremádamente sencillo también, Drone.io permite desplegar el proyecto en un servicio externo una vez que el build ha terminado. Al momento tiene integración con Heroku, AppEngine y dotCloud, pero además permite configurar el despliegue vía SSH, así que las posibilidades se extienden con esta última opción. Por supuesto, si utilizamos un servicio como Heroku, AppEngine o dotCloud también tendremos que configurar lo necesario en la cuenta que tengamos para que pueda levantar el proyecto.

Así es como lucen las ejecuciones de Drone.io al integrar un proyecto: https://drone.io/github.com/javamexico/javamexico.org

Aquí el output de la última ejecución (se puede ver que al final despliega en Heroku): https://drone.io/github.com/javamexico/javamexico.org/13

Y aquí la aplicación desplegada en Heroku (como es la cuenta gratuita a veces carga y a veces no, aunque ese ya no es problema de Drone.io): http://javamexico.herokuapp.com/

Conclusiones

Es una excelente opción el poder configurar un servicio de CI tan fácilmente. Tengo algunos proyectos en CloudBees y otros en Jenkins locales, CloudBees funciona muy bien al tener instancias de Jenkins completamente configurables en la nube, aunque para proyectos que no requieren un alto nivel de configuración y que simplemente necesitan lo básico para garantizar integración contínua Drone.io es la mejor opción ya sea para proyectos privados o libres.

La desventaja que puede tener es que (al menos hasta el momento) no cuenta con muchas opciones, eso mismo aumenta su simplicidad pero si se requiere un nivel de personalización más amplio deja de ser la mejor opción a considerar.

Espero les sirva tanto como a mi, saludos a todos.