La integración continua consiste en hacer integraciones automáticas (compilación, despliegue y ejecución de pruebas)  de un proyecto lo más a menudo posible para así poder detectar y notificar fallos cuanto antes.
Esto permite ejecutar todas las baterías de pruebas y así descubrir si nuestra última versión es compatible con el resto del sistema, tiene algún fallo anteriormente identificado y/o corregido, y en general conocer cuál es el grado de cobertura de requisitos verificados y la fiabilidad de nuestro proyecto.

Es recomendable y mucho menos costoso corregir pequeños problemas continuamente que enfrentarse a grandes problemas cerca de la fecha de entrega fijada.

Ventajas

 

Componentes de un entorno de IC

En el esquema se detalla una  ejemplo de arquitectura de integración continua completa sobre el que se entrará en detalle además de indicar alternativas para cada componente.

 

Sistema de integración continua

Es el núcleo de la integración continua, determina el modo de realizar una build, mediante el establecimiento de tareas.

El más utilizado es Jenkins. Un software de Integración continua open source, liberado bajo licencia MIT, escrito en JAVA, como una evolución de Hudson.  Necesita un contenedor de servlets o un servidor de aplicaciones. Soporta herramientas de control de versiones y puede ejecutar proyectos basados Ant y Maven, así como scripts de shell y programas batch de Windows.

Control de versiones 

Se encarga de la gestión de los diversos cambios que se realizan sobre los
elementos de algún producto o una configuración del mismo. Una versión, revisión o edición de un producto es el estado en el que se encuentra en un momento dado.

Subversion (SVN) es un sistema de control de versiones, basado en software libre con licencia Apache/BSD. Es flexible , permite crear diferentes repositorios con usuarios propios en cada caso o usuarios que pueden acceder a varios repositorios.
Realiza un histórico y seguimiento de ficheros y directorios aun siendo copiados o renombrados. Permite medir de forma tangible el trabajo realizado por cada usuario a diario.
Las modificaciones se pueden realizar de forma atómica (por ejemplo, solucionar un bug que afecta a 10 ficheros se puede considerar un único cambio).
Se integra fácilmente con otros componentes de IC como los gestores de incidencias (Mantis BT o JIRA) o sistemas de integración continua (Jenkins, Apache Continuum o Cruise Control).
Existen numerosas alternativas a SVN: CVS,Git, SourceSafe, ClearCase, Darcs,
Bazaar, Plastic SCM, Mercurial, Perforce, Fossil SCM.

Automatización de la compilación 

Maven es una herramienta de software para la gestión y construcción de proyectos Java. Tiene un modelo de configuración de construcción simple basado en un formato XML.

Utiliza un Project Object Model (POM) para describir el proyecto de software a construir, sus dependencias de otros módulos y componentes externos, y el orden de construcción de los elementos. Viene con objetivos predefinidos para realizar ciertas tareas claramente definidas, como la compilación del código y su empaquetado.
Una característica clave de Maven es que está listo para usar en red. El motor incluido en su núcleo puede dinámicamente descargar plugins de un repositorio, el mismo repositorio que provee acceso a muchas versiones de diferentes proyectos Open Source en Java, de Apache y otras organizaciones y desarrolladores.
Como alternativas Gradle y apache ANT para java, PEAR para PHP y CPAN para Perl.

Plugin de maven

Maven Cargo es un plugin que permite manipular servidores de aplicaciones de forma estándar, arrancándolos, parándolos e instalando aplicaciones. Tiene soporte para múltiples servidores de aplicaciones, Jboss, Tomcat, Oracle…

Maven Surefire se utiliza durante el ciclo de vida de pruebas, para ejecutar las pruebas y
crear informes, en formato de texto, xml o html. Estos informes son interpretados por el sistema de integración continua. Maven Surefire puede utilizar diferentes herramientas para la gestión de las pruebas, el ejemplo más extendido es Junit.

Repositorio de artefactos

 

Gestión de incidencias

 

Control de calidad de código

 

Automatización de pruebas

 

Gestión de requisitos y pruebas