Integración continua (CI): Fundamentos y beneficios

Si te interesa el desarrollo de software ágil, seguro que has escuchado el término integración continua o continuous integration (CI). ¿Sabes qué es?

Origen de la integración continua

Según Wikipedia, el primer proyecto que se conoce en el que se utiliza la integración continua, es en 1989, utilizado en Infuse, un entorno de desarrollo de software experimental, enfocado en cambiar la coordinación durante la fase de mantenimiento/evolución en proyectos de software a gran escala.

Sin embargo, el término empieza a coger más fuera cuando es utilizado años después, en 1994 por Grady Booch, en su libro «Análisis y diseño orientado a objetos con aplicaciones» (2ª Edición).

O quizá más importante, por parte de Kent Beck y Ron Jeffries, cuando en 1997 la incluyeron como parte de Extreme Programming. En los siguientes años, Jeffries profundizaría más en el concepto de Integración continua, remarcando la importancia de la comunicación cara a cara, sobre el soporte técnico.

¿Qué es la integración continua?

Una de las definiciones más extendidas es la que realiza Martin Fowler en su blog, y en la que dice:

La integración continua es una práctica de desarrollo de software donde los miembros de un equipo integran su trabajo frecuentemente, normalmente cada persona lo hace diariamente, lo que conduce a múltiples integraciones por día. Cada integración es verificada por un build automatizado (incluyendo los test) para detectar los errores de integración tan rápido como sea posible.

Así que, es importante destacar 2 detalles sobre la integración continua:

  • Se lleva a cabo por parte de todo el equipo
  • Se verifica con un build automatizado

¿Qué ventajas aporta la integración continua del software?

La integración continua es una de las claves iniciales de DevOps, aportando las bases para que los proyectos se construyan de forma ágil manteniendo la calidad en el software.

Reducir la complejidad de proyectos largos

En desarrollos en cascada (por desgracia siguen habiendo ) es complicado realizar todas las tareas de empaquetado y mantenimiento de librerías, plugins, etc… ya que, este tipo de proyectos, difiere en gran medida su resultado final con el que había planificado, debido sobretodo a la cantidad de tiempo que hay desde la fase de planificación hasta la puesta en producción.

Y cuando estos proyectos crecen, esas tareas de mantenimiento y actualización necesarias requieren en exceso de revisiones manuales en las que la falta de registro y de documentación (porque el crecimiento del proyecto impedía cumplir con los plazos, y es lo primero en lo que se redujo).

Por lo tanto, cuando se automatizan las tareas de construcción del software, y se trabajan con incrementos menores (iteraciones) es más fácil y rápido mantener los requisitos que permiten mantener su calidad.

Reducir los errores

Otro de los aspectos que muestra la definición de integración continua, es que se realizan las pruebas durante su construcción.

Y si además tenemos en cuenta, que estas pruebas no dependen tan en gran medida de factores humanos, se pueden realizar más rápido y con resultados más fiables.

También está fuertemente relacionado con la reducción del tiempo de las interacciones, por lo que cuanto menor sea su duración, más fácil será localizar estos errores, y por lo tanto resolverlos.

Facilitar el despliegue

A pesar de la cantidad de nuevas funciones que puedes añadir al producto gracias a la integración continua, el despliegue será posteriormente mucho más rápido y fácil.

Esto es debido a que ya has validado que las novedades que se van a integrar cuentan con lo necesario y funcionan correctamente.

Entregar más rápido

Gracias a la automatización de tareas como descargar código fuente, construir y testear, los desarrolladores pueden enfocarse en realizar las nuevas funcionalidades que los usuarios demandan.

Mejorar los costes y la productividad

Vistas todas las ventajas anteriores, es obvio que con la integración continua se consigue entregar un mejor producto en menos tiempo, lo que implica una mejora de la productividad; y además, se han reducido el número de errores que se detectan después de la implantación, por lo que, se producirá un ahorro significativo de los costes de mantenimiento y soporte

Herramientas para realizar integración continua

Bueno, hacer integración continua no se limita a utilizar una herramienta.

Como has visto, requiere de formación, comunicación y que todo el equipo se involucre en la adopción de una práctica que, si bien requiere un tiempo mayor inicial para realizar las automatizaciones necesarias, los beneficios superan de lejos las desventajas.

Pero, si ya te has dado que cuenta la integración continua es imprescindible hoy en día en el desarrollo de software, aquí te dejo un resumen de las herramientas más utilizadas para realizar las tareas de las que hemos hablado.

Jenkins

jenkins integracion continua

Está escrito en Java, bajo licencia Open source (MIT)

Conocido anteriormente como Hudson, lanzado en 2005, adoptó este nuevo nombre sobre 2011.

No cuenta con una interfaz intuitiva, pero a pesar de ello, es quizá la más extendida. Para ello juega un papel muy importante, su gratuidad y la comunidad que lo mantiene.

Lo que si se podría destacar es su cantidad de plugins disponibles, que le permiten realizar una gran cantidad de tareas, no sólo de integración continua, y que facilitan si es necesaria su migración a otros entornos.

Además, el uso de un archivo .jenkisfile facilita la ejecución de sus pipelines y la personalización de las tareas que debe realizar.

Puedes encontrar más información en su web: jenkins.io

Bamboo

Bamboo integracion continua

Bamboo es la herramienta de integración y despliegue continuo de Atlassian.

Aunque inicialmente contó con versiones tanto Cloud como para Server, en 2016 dejó de ofrecer la versión Cloud.

Al ser una herramienta de Atlassian, destacaría la sencilla integración con el resto de herramientas de su ecosistema: Jira, Confluence, etc…

En la web de Atlassian, puedes ver más acerca de Bamboo: atlassian.com/software/bamboo

Travis CI

Travis CI integracion continua

Travis está escrito en Ruby, e igual que Jenkins está desarrollado bajo licencia Open Source (MIT)

Los proyectos libres, pueden ser testeados de forma gratuita a través de travis-ci.org

La configuración de las tareas a realizar se hace mediante la creación de un archivo .travis.yml, que se aloja en la raíz del proyecto alojado en Github.

Puedes saber más de Travis CI en su página: travis-ci.com

Comparativa de herramientas de integración continua

Éstas no son las únicas herramientas disponibles de integración continua, existen más, tanto gratuitas como de pago.

Pero quizá si que son las más extendidas.

De todas formas, te dejo por aquí un enlace a una comparativa para que puedas validar si se adaptan a lo que necesitas.

Comparison of continuous integration software (Wikipedia)


¿Qué ventajas aportaría para ti la integración continua? ¿Existe algo que te impide llevarla a cabo? Me gustaría saberlo y para ello están los comentarios.

Lectura recomendada

Gestión del tiempo: 10 consejos para ser más eficiente Una correcta gestión del tiempo te facilita el camino para conseguir hacer lo que te propongas. Descubre 10 consejos que te serán de gran ayuda.

Un comentario sobre “Integración continua (CI): Fundamentos y beneficios

Deja un comentario