Este documento describe el proceso de integración continua en proyectos de software. La integración continua involucra automatizar la integración de código de manera frecuente para detectar errores temprano. Herramientas como Jenkins, Travis CI y Hudson automatizan tareas como compilar el código, ejecutar pruebas y enviar notificaciones después de cada cambio en el repositorio. Esto ayuda a mantener la calidad del código y monitorear el estado del proyecto.
Herramientas de integración continua en proyectos software
1. 8 www.coiicv.org
Bit@cora Enero 2016
El objetivo de este artículo es comentar a
grandes rasgos en qué consiste el proceso
de integración continua en proyectos de sof-
tware, pasando posteriormente a comentar
herramientas específicas que podríamos
utilizar para automatizar dicho proceso .
La integración continua es una práctica de
desarrollo software ligada a la programa-
ción extrema que consiste en automatizar
el proceso de integración de código para po-
der realizarlo de la manera más continuada
posible, donde los miembros del equipo in-
tegran su trabajo de forma frecuente en un
repositorio.
Cada integración se verifica compilando el
código fuente y obteniendo un ejecutable o
build de forma automatizada. Además tam-
bién se pasan las pruebas y métricas de ca-
lidad para detectar los errores tan pronto
como sea posible.
La idea básica es que los desarrolladores
suban los cambios de forma frecuente al re-
positorio, para que en caso de conflicto, los
errores se puedan solucionar lo antes posi-
ble. De esta forma se automatizarían todos
los pasos, desde obtener el código fuente
hasta ejecutar los tests.
El proceso normal que se sigue en un es-
quema de trabajo CI es el siguiente:
• Los desarrollares envían sus modifica-
ciones al repositorio gestionado por un
sistema de control de versiones (Git,
svn, subversion).
• El servidor de integración continua mo-
nitoriza el repositorio buscando cambios
y ejecuta automáticamente el build cada
vez que se produzca algún cambio.
• Una vez finalizado el proceso de build
(integración, construcción, pruebas y
despliegue) el servidor envía a los res-
ponsables un email con el resultado del
proceso para obtener feedback de posi-
bles errores que se estén produciendo.
• El servidor realiza el paso 2 continua-
mente.
Las ventajas de usar un servidor de inte-
gración continua son:
• Posibilidad de monitorizar el control de
versiones y actuar ante cualquier cam-
Herramientas de integración continua en
proyectos software
José Manuel Ortega Candel
Centers Technician de Everis.
@jmortegac
www.linkedin.com/in/jmortega1
2. 9www.coiicv.org
Bit@cora Enero 2016
hay que hacer en el proceso de construc-
ción del entregable. Por ejemplo, podría-
mos programar una tarea en la que se esté
comprobando cada cierto tiempo el reposi-
torio de control de versiones, de esta forma
cuando un desarrollador quiera subir su có-
digo al control de versiones, este se com-
pile y se ejecuten los tests unitarios y de
integración.
Si el resultado no es el esperado o hay al-
gún error, Jenkins notificará al desarrolla-
dor, o al equipo de QA, para que lo solucio-
ne. Si el build es correcto, podremos indicar
a Jenkins que integre el código y lo suba al
repositorio de control de versiones.
Travis CI es un servidor de integración
continua en la nube, desde el cual podemos
vincular nuestra cuenta de Github. Cada
vez que realizamos un commit & push
a nuestro repositorio de Github, detecta
dicho cambio y ejecuta las tareas que tenga
planificadas.
Una de las principales ventajas que ofrece
Travis CI es que no necesitamos crearnos
nuestro propio servidor ya que viene
integrado en Github y se puede utilizar
tanto para proyectos privados como open
source. Además ofrece soporte para
multitud de lenguajes entre los que se
pueden destacar: Clojure, Erlang, Groovy,
Haskell, Java, Javascript, Perl, PHP, Python,
Ruby y Scala.
Otra de las ventajas que tenemos con
Travis CI es que el entorno de integración
continua está compuesto de múltiples
runtimes o entornos de ejecución. De este
forma, podemos probar nuestras librerías o
aplicaciones contra distintas configuraciones
sin tener que tenerlas instaladas en local.
Hudson es una servidor de integración
continua escrito en Java, que se ejecuta en
servidores de aplicaciones como Apache
Tomcat o Glassfish. Trabaja con la mayoría
de herramientas de control de inversiones y
bio, así como evitar conflictos entre las
versiones utilizadas para generar los
entregables. Al realizar la compilación
en el servidor se garantiza que siempre
se usa la misma versión del compilador,
SDKs y librerías de terceros.
• Permite detectar rápidamente
errores introducidos por cambios en el
código. Al hacer que el código se compile
cada vez que se hace el commit en el
servidor de integración continua, los
errores se suelen detectar en cuestión
de minutos.
• Mantener un histórico de los resultados
de las compilaciones. Dependiendo de
los análisis que estemos realizando
sobre nuestro código, esto nos permite
ver cómo ha evolucionado la cobertura
de código de los tests y otras métricas
como complejidad y líneas de código.
• Al ejecutarse las pruebas unitarias cada
vez que se ejecuta el build, permite que
el desarrollador pueda darse cuenta
rápidamente de cualquier error en su
código.
• Desde el servidor se puede indicar
que se lancen métricas de calidad y
visualizar los resultados dentro de
la misma herramienta. También se
pueden ver los resultados de los tests,
generar y visualizar la documentación
del proyecto o incluso pasar una versión
estable del software al entorno de QA
para ser probado, a pre-producción o
producción.
Entre las herramientas que disponemos
hoy en día en forma de servidores de in-
tegración continua que son open source
podemos destacar: Jenkins, Travis CI y
Hudson.
Jenkins es un servidor donde la base son
las tareas, donde indicamos qué es lo que
3. 10 www.coiicv.org
Bit@cora Enero 2016
puede ejecutar proyectos basados en Apa-
che Ant y Apache maven, así como trabajar
también con shell scripts y procesos batch.
Conclusiones
El concepto de integración continua es una
forma de desarrollo de software que mejo-
ra el proceso y la puesta en producción del
producto desarrollado, mediante la aplica-
ción de herramientas de automatización y
mejora continua del proceso.
Este proceso es parte fundamental para
mantener la calidad de todo el sistema, y
ayuda a identificar rápidamente problemas
y corregirlos con tiempo.
Al integrar frecuentemente el código, y con
la ayuda de las herramientas comentadas
como Jenkins, es posible puede monitori-
zar la calidad del código y su cobertura de
pruebas así como tener una visión global el
estado del proyecto en todo momento.
La idea es que estos servidores se encar-
guen de descargar el código de los reposi-
torios, pasar las pruebas unitarias y mos-
trar el resultado de las mismas.