Integración continúa con Jenkins en aplicativos Java

La integración continua consiste en hacer el software auto verificable mediante pruebas automatizadas e incorporar las modificaciones o actualizaciones progresivamente de tal manera que se garantice el funcionamiento y consistencia del producto. En el post de hoy la idea es desplegar uno de los servidores de integración continua  open source mas populares Jenkins y administrar los cambios en proyecto Java en Github.

La idea del servidor Jenkins es que pueda tomar la última versión de los cambios en el proyecto en github  y pueda:
1. Compilar las diferentes clases del aplicativo web
2. Generar el Javadoc de las diferentes clases.
3. Correr las pruebas de unidad que validan la correctitud del aplicativo.
4. Validar la cobertura de las pruebas de unidad.
5. Hacer análisis de código estático usando PMD
6. Desplegar la versión construida (war) a un servidor Tomcat 7.0.

Instalación y construcción del Aplicativo

Lo primero que necesitamos hace es instalar Jenkins. En Windows la instalación es bastante sencilla. Solo es necesario descargar el instalador de la página web y seguir el asistente. Al final de la instalación tendremos un servidor Jenkins corriendo en el puerto 8080.

Jenkins

Compilando con Maven.

Maven es una herramienta que nos ayuda a gestionar las dependencias y la construcción de  diferentes tipos de proyectos. Los proyectos gestionados con Maven se basan en un archivo POM (project object model) que contiene toda la información necesaria para su construcción y empaquetado.

El JDK 1.7 podemos descargarlo en el sitio oficial de Oracle y Maven en el sitio oficial del proyecto. La página de apache tiene una guía bastante simple para la  instalación de Maven por lo que no daré detalles.

La configuración de Maven y el JDK se realiza ingresando al menú principal de administración (Administrar Jenkins) y después en administración del sistema. En los parámetros de especificación configuraremos la carpeta donde se encuentra instalado el JDK y el la carpeta repositorio (por defecto en la carpeta del usuario)  de Maven.

JDKMaven

Conectando Jenkins con Github

En el proceso de integración continua la idea es que el servidor Jenkins descargue la última versión del aplicativo en Github. Para hacerlo  es necesario descargar e instalar Git para Windows e instalar el plugin de Git para Jenkins.

GitPlugin

Los plugins de Jenkins nos permiten agregar funcionalidad extra al servidor de integración continua como envió de notificaciones por correo o en este caso integración con un sistema de control de versiones. Los plugins se encuentran disponibles en el menú principal Administrar Jenkins – Administrar plugins.
Después de instalar git es  necesario configurar Jenkins con la ruta del git.exe en la configuración del sistema (Administrar Jenkins – Administración del sistema).

git- configuration

Creando la tarea de construcción

Para especificar  la tarea de construcción  creamos una tarea en el menú principal y seleccionamos la opción «Crear un proyecto de estilo libre».

Nueva Tarea

Para descargar el proyecto de git configuramos el origen de del código fuente con los datos del servidor de control de versiones y especificamos el comando de Maven para la compilación (Compile). También si el POM del proyecto no se encuentra en el directorio base es necesario especificar la ruta.

GitConfigurationProyecto

Generando el Javadoc

Javadoc es el estándar de Java para la documentación de código fuente. Para generar el Javadoc es necesario usar ejecutar la directiva de maven javadoc:javadoc y especificar en la configuración de construcción el directorio del archivo generado.

javadoc

Corriendo las pruebas de unidad

Las pruebas de unidad implementadas usando Junit son pruebas de caja blanca que verifican la correctitud de las unidades o piezas de código. Para generar correr las pruebas de unidad es necesario usar ejecutar la directiva de maven test y especificar en la configuración de construcción el directorio del archivo generado.

Junit

Realizando el análisis de cobertura

El análisis de cobertura es una métrica que nos indica el porcentaje de código cubierto por las pruebas de unidad. El análisis de cobertura tiene en cuenta la validación de casos positivos y negativos tipos de un condicional o la validación de múltiples casos como en un swtich case. Para el análisis de cobertura es necesario instalar el plugin de cobertura para Jenkins y agregar la directiva de maven cobertura:cobertura –Dcobertura.report.format=xml para especificar que los reportes se generen en xml y especificar en la configuración de construcción el directorio del archivo generado.

Cobertura

Análisis de código estático usando PMD

PMD es un analizador de código de revisa diferentes métricas que pueden afectar el código como variables o imports sin uso. Para el análisis de cobertura es necesario instalar el plugin de pmd para Jenkins, agregar la directiva de maven pmd:pmd y especificar en la configuración de construcción el directorio del archivo generado.

PMD

Desplegar el aplicativo en el Tomcat

Parte de los principios de la integración es tener una construcción lista para pruebas. En este caso la idea es tener nuestro aplicativo web en el servidor listo después de la validación y compilación de Jenkins. Para realizar esta tarea instalación el pluging deploy war/ear de Jenkins y agregamos la ruta y usuario de Tomcat. Tambien es necesario agregar el rol scriptal tomcat

Tomcat

Ya esta de ese manera tendremos nuestro aplicativo corriendo de manera automáticamente pruebas de unidad, cobertura, análisis de PMD obteniendo los cambios directamente desde un repositorio Git y desplegando los cambios en un servidor Tomcat.