viernes, 2 de septiembre de 2011

Integración continua con Jenkins

Jenkins
Jenkins es una herramienta de integración continua (CI) que permite realizar tareas periódicas y automáticamente como generar el archivo del proyecto o ejecutar los casos de prueba. Usar una herramienta de integración continua tiene varios beneficios como detectar problemas de forma temprana haciendo que sean más fáciles de resolver y automatizar procesos repetitivos que nos liberan de tiempo. Todo ello en un entorno independiente de los de desarrollo.

Su instalación y uso es muy sencillo basta con descargar u archivo .war y arrancarlo con:

java -jar jenkins.war

O desplegarlo en un contenedor de aplicaciones como Tomcat ya que es una aplicación web java. Su configuración se puede hacer completamente desde la interfaz de usuario que proporciona. Algunas otras características de Jenkins son:

- Puede proporcionar el conjunto de cambios realizados en un commit al repositorio de control de versiones como CVS/Subversion.
- Proporciona enlaces permanentes para porder utilizarlos en otras herramientas.
- Tiene nitificiones por RSS, correo electrónico y mensajería instantánea.
- Informes de las pruebas JUnit y TestNG.
- Puede distribuir las compilaciones y pruebas entre varias máquinas.
- Y una de sus mejores características, el soporte para plugins que le añaden funcionalidades. Y hay un montón de ellos para diversas tareas.

Jenkins no necesita una base de datos para funcionar lo que simplifica su configuración pero necesita guardar datos y lo hace por defecto en el directorio ~/.jenkins. Para actualizar a una nueva versión de jenkins basta con reeemplazar el archivo jenkins.war por el nuevo. Para hacer una copia de seguridad de los datos o copiarlos a otra máquina basta con copiar el directorio ~/.jenkins.

Nada más arrancar Jenkins y acceder con el navegador a la dirección http://localhost:8080/jenkins veremos la siguiente página:

Vamos a ver como configurar una tarea para sea ejecutada por jenkins cada cierto tiempo y vamos a ver como instalar un plugin, en concreto el plugin de git.

Para crear una tarea que haga el trabajo que queramos pulsaremos el enlace «Crear nueva Tarea», le daremos un nombre a la tarea y seleccionaremos la opción «Crear un proyecto de estilo libre». Al configurar la tarea veremos un montón de opciones pero por suerte de cada una de ellas tiene una «?» con la que podremos obtener ayuda. Algunas importantes son la configuración para que jenkins obtenga el código fuente de la aplicación. El apartado de disparadores de las ejecuciones por una expresión cron o por consulta de repositorio de control de versiones. El apartado de Ejecutar para lanzar la tarea que deseemos. Y las acciones que queramos que haga jenkins despues de ejecutar la tarea como enviar correos electrónicos o ejecutar otros proyectos. En la captura de pantalla he configurado una tarea (o proyecto) para que se ejecute cada minuto lanzando el comando date del sistema (en este caso de un sistema Linux).



Una vez que la tarea (o proyecto) se lanza en la opción Salida de consola podemos ver la salida de la tarea lanzada, muy util si queremos ver que ha sucedido en ella.

Para instalar el plugin de git basta ir al apartado «Administrar Jenkins > Administrar Plugins > Todos los plugins» marcar el de git, pulsar el botón instalar al final de la página y reiniciar jenkins.



En la pantalla de Panel de control podemos obtener en laces a fuentes RSS de los proyectos fallidos, de los más recientes o de todos los trabajos para recibir notificaciones por esta vía.

Usar una herramienta continua como jenkins además de las ventajas que ya de por si aporta con la integración continua es motivador para el equipo de desarrollo ya que en cierta forma le obliga a conseguir que la última ejecución de las tareas sea en todo momento correcto. Es una de esas herramientas imprescindibles a usar en cualquier proyecto.

Referencia:
http://en.wikipedia.org/wiki/Continuous_integration
http://jenkins-ci.org/
https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins
https://wiki.jenkins-ci.org/display/JENKINS/Use+Jenkins
https://wiki.jenkins-ci.org/display/JENKINS/Extend+Jenkins
https://wiki.jenkins-ci.org/display/JENKINS/Containers