Integración continúa completada en tan solo 3 pasos

El post de hoy trata de nuestra experiencia con la configuración de varios servicios, para construir una “pipeline” que nos permitiera realizar una integración continua; nuestro objetivo era poder sistematizar el proceso de pruebas unitarias, sincronización con el repositorio y despliegue.

A decir verdad, nuestro equipo de trabajo no está muy familiarizado con este tipo de configuración, pero haber trabajado con linux en algunas asignaturas en el transcurso de la universidad nos facilitó un poco las cosas.

Antes que nada les contare como manejamos nuestro repositorio en GitHub, como somos pocos integrantes no realizamos grandes cambios en el código sin que los demás se enteren, de cierta forma esto agiliza el trabajo de nosotros como desarrolladores, ya que conocemos totalmente la aplicación, por otra parte esto hace que el código no tenga un alto grado de desacoplamiento es decir, nuestro código es poco modular, ahora mismo no nos genera problemas, pero en un futuro ya nos dará de qué hablar… nosotros trabajamos sobre la rama “DEV” y nuestro objetivo es que cada función que se vaya agregando se INTEGRE automáticamente a “MASTER”.

Aquí, los pasos que seguimos para lograr nuestro objetivo:

  1. Herramientas y más herramientas: Después de “Googlear” sobre cómo conseguir esta optimización encontramos bastantes herramientas sobre cómo hacerlo (CIRCEL CI, TRAVIS CI, JENKIS) y un compañero nos comentó que tanto Circel como Travis era muy similares, solo basta configurar un archivo en el repositorio con la arquitectura y las dependencias que se utilizarán, además estas funcionan en base en una máquina virtual de linux que se ejecuta en un servidor remoto. al final nos decidimos por CIRCLE, nos dimos a la tarea de documentarnos y configurar esta herramienta.
  2. Optimizar la herramienta: Una vez configurado el sistema y la arquitectura, era momento de automatizar las pruebas unitarias que son manejadas a través de PHPUnit y en seguida lograr la integración con la rama master, esto se logra añadiendo las sentencias correspondientes al archivo circle.yml que almacena toda la configuración y los comandos que se ejecutarán en la máquina virtual.
    Aquí como quedo nuestro archivo: 
    https://github.com/Nicolaysito/Hobbyonthego/blob/master/circle.yml
  3. Despliegue: Bueno esta parte fue algo sencilla porque ya habíamos tenido una práctica con Heroku, la cual es una herramienta que permite integrar varios servicios a través de pipelines, actualmente están desarrollando un módulo para manejar las pruebas, así como lo hacen las aplicaciones antes mencionadas; fue tan sencillo como crear un nuevo proyecto, agregamos los credenciales de github, configuramos el lenguaje que manejaba la aplicación en nuestro caso PHP y cómo se desplegará y en unos instantes tras hacer commit a master ya se estaba desplegando la app.

Aquí un pequeño diagrama de cómo quedó nuestro pipeline de integración continua

Aún nos quedan pendientes un par de cosas por configurar y optimizar, pero es probable que esta información básica de cómo lograr una integración continua le facilite el trabajo a alguien.

Por último, dejo el link de nuestra aplicación para que nos comenten que les parece:

hoobyonthego.rf.gd