¿Qué es la Integración Continua (CI)?
Durante los últimos tiempos se ha puesto de moda en el mundo del desarrollo de software hablar de la Integración Continua. La integración continua nació bajo el amparo de los precursores de la Programación Extrema (XP) Martin Fowler y Kint Beck en el año 1999.
Pero, ¿qué es la Integración Continua?
Si hacemos caso a la wikipedia, la integración continua consiste en ejecutar un serie de procesos de forma continua para la gestionar el control de la calidad. El principal objetivo es mejorar la calidad del software y reducir los plazos de entrega, eliminando por completo la idea de aplicar el control de calidad una vez finalizados todos los desarrollos.
Dentro de esta serie de procesos se encuentran la gestión del repositorio de código (CRM), generación de build diarios, ejecución de los test para cada uno de estos build, subir nuestros cambios al BASELINE todos los días, siempre que subamos cambios al BASELINE debemos realizar un build, automatizar los deploy, …
Y después de todo el rollo que os acabo de contar, ¿cuáles son los principales objetivos que persigue la integración continua?:
- Uno de los principales objetivos, es la detección de errores lo antes posible.
- Reducción del tiempo de integración, a través de la automatización de la compilación, ejecución de pruebas, deployments, notificación de errores a los miembros del equipo …
-Minimizar riesgos, mediante la generación de versiones del producto en fase tempranas del desarrollo.
- Obtención de métricas generadas a partir de pruebas automatizadas (métricas de cobertura, complejidad de código, …) de esta forma permite a los desarrolladores generar un código de mayor calidad cumpliendo las reglas de estilo establecidas.
- Disponibilidad contínúa de la última versión del código para pruebas, agilizando los procesos de despliegue en diferentes entornos.
Pero no todo en la vida son alabanzas, y como no podía ser de otra forma, también tiene sus desventajas:
- Necesitamos un tiempo de implantación inicial.
- Es imprescindible desarrollar una buenas test-suite para la automatización de pruebas para sacarle rendimiento.
- La refactorización a gran escala puede ser problemática debido a la continua evolución del código base.
- El coste hardware puede ser significativo.
No obstante, creo que las ventajas superan a los inconvenientes. Y que es una gran ventaja determinar y poder solucionar los errores de integración en las fases iniciales del desarrollo.
Por último, solo me queda comentar algunas de las herramientas CI. La más conocida y de la que mejor habla la gente es Hudson-CI (o deberíamos empezar a llamarlo Jenkins, para más info), CruiseControl que dispone también una versión para .Net y Apache Continuum. No obstante existen multitud de herramientas CI.
Voy a cacharrear con Hudson-CI y posiblemente con Apache Continuum.
Todas vuestra aportaciones son bienvenidas así que no os cortéis.
Salu2. Héctor.



Ya nos diras que opinas de los dos, pero me apuesto el cuello que te va a molar más Jenkins, es muy simple de montar y configurar, si usas maven la cosa se simplifica mucho más a la hora usar junit y la construcción de los proyectos desde los repositorios.
Yo creo que la única pega que tiene preparar un “tinglao” del que hablas es acostumbrarse a hacer buenos test, requiere mucha más programación.
Echa un ojo a Selenium y el plugin para Hudson/Jenkis, facilita mucho la creación de test desde la vista web.