Integración continua
# Integración continua

La integración continua (continuous integration en inglés) es una práctica de ingeniería de software 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.

El proceso suele ser: cada cierto tiempo (horas), descargarse las fuentes desde el control de versiones (por ejemplo CVS, Git, Subversion, Mercurial o Microsoft Visual SourceSafe) compilarlo, ejecutar pruebas y generar informes.

Para esto suelen utilizarse aplicaciones como Travis CI, Solano CI, Bamboo, Pipeline, Apache Continuum, Hudson, Jenkins, GoCD, CruiseControl o Anthill (para proyectos Java) o CruiseControl.Net, Team Foundation Build para .Net, que se encargan de controlar las ejecuciones, apoyadas en otras herramientas como Ant o Maven (también para proyectos Java), o Nant o MSBUILD (para .Net) que se encargan de realizar las compilaciones, ejecutar las pruebas y realizar los informes.

A menudo la integración continua está asociada con las metodologías de programación extrema y desarrollo ágil.

## Historia

El trabajo más temprano conocido con integración continua fue el entorno Infuse (Infuse environment) desarrollado por G.E. Kaiser, D.E. Perry y W.M. Schell.

En 1994, Grady Booch uso la frase integración continua en Análisis y diseño orientado a objetos con aplicaciones (2.ª edición) para explicar como, cuando se desarrolla utilizando micro procesos, "liberaciones internas representan una forma continua de integración del sistema, y existe para forzar a dar cierre a los micro procesos".

En 1997, Kent Beck y Ron Jeffries definieron el concepto de Extreme Programming (XP) mientras trabajaban en el Chrysler Comprehensive Compensation System project, incluyendo integración continua. Beck publicó sobre integración continua en 1998, haciendo énfasis en la importancia de la comunicación cara a cara sobre la asistida por tecnología. En 1999, Beck elaboró más en su primer libro completo sobre Extreme Programming.

CruiseControl, es una de las primeras herramientas de código libre, y fue lanzada en 2001.

## Ventajas

* Los desarrolladores pueden detectar y solucionar problemas de integración de forma continua, evitando el caos de última hora cuando se acercan las fechas de entrega.
* Disponibilidad constante de una versión para pruebas, demos o lanzamientos anticipados.
* Ejecución inmediata de las pruebas unitarias.
* Monitorización continua de las métricas de calidad del proyecto.
