RSS

Jenkins, integración continua

25 sep

Jenkins logo Jenkins es un proyecto de software libre que funciona como servidor de integración continua. Si alguien conoce ya Hudson podemos decir que Jenkins es Hudson. Es más, todavía existe Hudson como un proyecto mantenido por Oracle y cedido por ésta a Eclipse Foundation. Sin embargo, a principios de este año (2011) la mayoría del equipo de desarrollo original de Hudson prefirió desligarse del proyecto Hudson y crear Jenkins Para conocer un poco más la historia de la genesis de Jenkins recomiendo leer este post y este otro y del creador de Hudson y más tarde JenkinsKohsuke Kawaguchi. Al final la discrepancia entre Oracle y la comunidad de desarrolladores es la misma que ha sucedido en otras ocasiones. ¿Por qué en un producto que ha salido del esfuerzo de una comunidad abierta de desarrolladores a quién menos caso se le hace es a la propia comunidad?. Aunque este podría ser un debate muy interesante vamos a centrarnos en Jenkins y en integración continua.

Integración y entrega continua de Software. 

De manera breve, integración continua podríamos decir que es una metodología usada en el desarrollo de software, especialmente en metodologías ágiles, por el cual nuestro código debe ser compilado y probado de manera continua.

¿Y cuáles son las ventajas de la integración continua?.

  • Cada cambio en nuestro código va a ser compilado y testeado de manera continua. Cada vez que un desarrollador de nuestro equipo realice un cambio en el proyecto, si utilizamos Jenkins o Hudson, se va a compilar de nuevo el proyecto y ejecutar todos los test de nuestra aplicación. Con lo cual nos vamos a dar cuenta inmediatamente de si ese cambio es incompatible con alguna parte del proyecto ya existente.
  • La integración continua permite incluir en nuestro proyectos métricas para determinar la calidad de nuestro software, indicar reglas generales a nuestro proyecto ó averiguar cuanto código está siendo probando por los tests entre otras muchas cosas.

Un paso más allá de la integración continua sería la entrega y el despliegue continuo de software. Esta metodología tiene como idea general que si el proceso de desarrollo de software es lo suficientemente elaborado se podría pasar nuestro proyecto de la fase de desarrollo a la fase de producción de manera practicamente directa.

Sobre despliegue continuo recomiendo leer estos los siguientes dos enlaces, Continuous deployment, 5 easy steps y Continuos deployment at Atlassian. Sobre entrega continua recomiendo la página Continuous delivery.  Pero si tuviera que recomendar un sitio donde comenzar para aprender algo sobre integración continua sería la página sobre integración continua de Martin Fowler. Si me permitís un pequeño consejo, tratar de leer lo máximo posible de él. En cuanto a libros hay un par sobre este tema que los tengo pendientes para algún día:

Continuos integrationContinuos delivery

Además Martin Fowler tiene a parte de su página web varios libros de patrones de diseño para aplicaciones de negocio con la misma buena pinta. Lo dicho todo muy recomendable.

Sobre Jenkins.

Como ya hemos mencionado Jenkins es una herramienta que nos ayuda a traer la integración continua a nuestro desarrollo software. Pero, ¿y qué quiere decir esto?. Simplemente, Jenkins nos va a permitir subir nuestro proyecto a un servidor de compilación y pruebas. Dentro de este servidor de Jenkins, vamos a poder configurar de manera muy extensa la compilación y la fase de pruebas de nuestro proyecto. Además vamos a poder ejecutar un montón de plugins  (unos 400 actualmente) para , entre otras cosas, generar reportes, medir la calidad de nuestro código, enviar nuestro código a producción, ….

PluginsJenkins

Instalación de Jenkins.

Instalar Jenkins es tan sencillo como bajarse el war jenkins.war de la página oficial de Jenkins y ejecutar el siguiente comando en tu consola:

 java -jar jenkins.war --httpPort=8081 --ajp13Port=8010.

Una vez ejecutado el anterior comando la pantalla que se nos presenta es la siguiente:

Jenkins pantalla inicial

Configurar Jenkins.

La pantalla de configuración de Jenkins es la siguiente:

AdministrarJenkins

Los principales parámetros de configuración son los siguientes

  • Configurar JDK.
  • Configurar Maven. En las secciones para JDK y Maven podemos indicar a Jenkins que se baje una instalación desde otro servidor.
  • Configurar sistemas de notificaciones.
  • Configurar sistema de versionado. En nuestro caso vamos a usar GitHub. Vamos a añadir integración continua al proyecto que hemos visto en Ejemplo básico de Spring MVC con Maven .

Configurar Jenkins 1

Configurar Jenkins 2

Podemos ver que existen multitud de parametros que podemos configurar. Algo realmente bueno de Jenkins es que al lado de cada campo de texto podemos encontrar ayuda textual con lo que sabemos rápidamente que valores tenemos que dar y cual es el cometido de escribir en un campo de texto o de marcar una determinada casilla en Jenkins.


Crear una nueva tarea en Jenkins. 

Una vez definida la configuración básica de Jenkins para compilar y probar nuestra aplicación vamos a tener que crear una tarea de Jenkins. Para crear y configurar una tarea debemos seguir los siguientes pasos:

  • Daremos un nombre descriptivo de la tarea.
  • Asociaremos la tarea a un proyecto Maven. Fijaros bien que existe un tipo de proyecto conocido Freestyle. Se pueden compilar y testear proyectos Maven marcando esta opción en lugar de la que sería normal, es decir, marcar como Maven. La opción Freestyle nos da un grano más fino sobre el proceso de compilación y prueba de nuestro proyecto. Sin embargo, para comenzar, quizá es más sencillo marcar el proyecto como Maven. Con esto nos aseguraremos que Jenkins asuma la mayoría de configuraciones por defecto para un proyecto gestionado por Maven y nos ahorramos complicaciones.
  • Indicaremos el repositorio (Git) donde está el código de nuestro proyecto con Spring MVC.
  • Indicaremos cuando queremos ejecutar nuestras pruebas de integración. Ponemos que se ejecute siempre. Se podría hacer con cron para que se indique cuando queremos hacer las pruebas. Aunque la idea es que Jenkins se utilice tan pronto como exista un cambio, y no programar tareas en intervalos de tiempo a priori.
  • Indicaremos que se nos envie correos con las ejecucciones. Podemos ver como configurarlo para el caso de Gmail en el siguiente link.
  • Indicaremos otras configuración como test, reportes,  ….
crear nueva tarea jenkins 1
crear nueva tarea jenkins 2

En un principio vemos que nuestra tarea se ha ejecutado con algún error (si os fijais sale una bola roja).

tarea jenkins creada

Ningún problema después de volver a configurar correctamente Jenkins, le había indicado mal la ruta de mi pom.xml, y de añadir algún test más vemos como nuestra tarea se ha ejecutado correctamente (bola azul).

tareas jenkins

Enlaces recomendables.

Además de los enlaces de los que os he ido hablando a lo largo del post, recomiendo mirarse el siguiente libro que ha sido récien publicado.

Jenkins, The definitive guide


 
2 comentarios

Publicado por en 25 septiembre, 2011 en Integración continua, JEE

 

Etiquetas: , , , ,

2 Respuestas a “Jenkins, integración continua

  1. f

    23 octubre, 2013 at 6:50 pm

    Gracias, buen post!

     

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

 
Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 69 seguidores

%d personas les gusta esto: