herramientas de integración continua en proyectos software

40
Hands-on with Amazon AI Julien Simon Principal Technical Evangelist [email protected] @julsimon

Upload: jose-manuel-ortega-candel

Post on 11-Apr-2017

34 views

Category:

Technology


1 download

TRANSCRIPT

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 CandelCenters Technician de Everis.

@jmortegacwww.linkedin.com/in/jmortega1

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

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.

ConclusionesEl 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.