En el mundo del software, palabras como integración continua o despliegue continuo (CI/CD) están a la orden del día. Se da por supuesto que todos los que estamos metidos en este gremio conocemos su significado y sus ventajas, pero la triste realidad es que no es así. Mucha gente no lo conoce y otra lo conoce y no lo aplica.
Por esa razón, en el artículo de hoy voy a intentar aclarar las ventajas que nos ofrece el concepto, para aseverar que, sin lugar a dudas, para hacer software de calidad, la integración continua es un requisito necesario y no negociable.
¿Qué es la integración continua (CI)?
Para poder hablar de sus ventajas, lo primero es conocer en qué consiste. La integración continua es el nombre que se le da a la automatización de las labores de compilación, test y análisis estático del código. Esto se puede conseguir de muchas maneras, y podemos llamar integración continua a todo lo que hay entre un script que periódicamente ejecuta el trabajo y un servicio online que lo haga.
La integración continua (continuous integration en inglés) es un modelo informático propuesto inicialmente por Martin Fowler que consiste en hacer integraciones automáticas de un proyecto lo más a menudo posible para así poder detectar fallos cuanto antes. Entendemos por integración la compilación y ejecución de pruebas de todo un proyecto. (Wikipedia)
¿Cómo funciona?
Independientemente del sistema que utilicemos para iniciarlo (tarea programada, un Webhook, etc), el proceso como mínimo seguirá el siguiente camino:
- Descargará el código fuente desde el repositorio de control de versiones (git, SVN, Mercurial...).
- Compilará el código según sea necesario.
- Realizará las pruebas unitarias y/o de integración.
- Publicará los resultados de modo que sea accesibles.
Dependiendo de lo integrado que esté el servicio con el repositorio de código, podemos verlo directamente en el historial de commits. Por ejemplo en el caso de GitHub:
¿Cuándo debería ejecutarla?
Lo ideal, es ejecutarla siempre que se añadan cambios al repositorio principal. Pero esto tiene un coste. Compilar cada cambio que hacemos nos da cierta seguridad, pero puede hacer que nuestro sistema de CI trabaje más de la cuenta y suponga un coste adicional. En cambio, aplicarla a todos los pull request nos garantiza que todos los cambios sobre la línea principal de trabajo van a funcionar bien. Aquí se trata de encontrar un equilibrio entre coste y beneficio.
Si nuestro proyecto es Open Source, existen varios servicios de integración continua online gratuitos como Travis CI, AppVeyor, Azure Pipelines, Circle CI.
¿Y qué me aporta?
Las principales ventajas que tiene son:
- Detectar rápidamente los posibles errores de compilación de nuestro código. (en mi máquina funcionaba...)
- Detectar funcionamientos anómalos en nuestro software. (es un bug, no una nueva característica)
- Mejorar la calidad de nuestros productos
- Nos permite compilar/testear nuestro código en diferentes plataformas.
En conclusión
Con el gran abanico de posibilidades que existen hoy en día para poder añadir integración continua a nuestro código, no hacerlo no es una opción. Da igual si es un proyecto grande o pequeño, da igual si eres un único desarrollador o un equipo. Existen incluso algunas opciones gratuitas que nos permiten hacerlo.
¿Quién no ha oído nunca el "en mi máquina funcionaba"? En mi experiencia personal, es una respuesta que he oído varias veces (y yo mismo he dicho). La integración continua es una solución muy eficaz para evitar ese tipo de problemas y poder aportar valor con nuestro software sin tener que perder horas y horas (que muchas veces no se tienen) en compilar nuestro proyecto para varias plataformas, ejecutar pruebas, analizadores de código...