Slide toggle

Bienvenido a mi Blog Personal

Un espacio donde compartir ideas, experimentar y aprender, donde encontrarás información relacionada con la Tecnología, el Marketing Digital y Crecimiento Personal

Sígueme

Follow on FacebookFollow on Google+Tweet about this on TwitterFollow on LinkedInEmail this to someone

Etiqueta: Maven

Aprende a Montar un Entorno de Integración Continua (V) – Ejecución de Jobs en Jenkins

Jenkins: Ejecución de Jobs – Aprende a Montar un Entorno de Integración Continua (V)

Como vimos en el post anterior, Jenkins es una aplicación web que nos facilita la planificación y ejecución de tareas(Jobs), como por ejemplo descargar programas desde repositorios de código, construir y probar el software o monitorizar la ejecución y resultado de los jobs ejecutados.

En esta nueva entrada vamos a aprender a configurar y ejecutar Jobs en Jenkins. Para ello, crearemos dos tareas:

  • HelloWorldCI-develop: realizará tareas de construcción, test y análisis de código
  • HelloWorldCI -publish: realizará la publicación de un artefacto en Nexus OSS

Configuración de las credenciales de acceso a Git

Antes de empezar a crear los Jobs, es necesario dar permisos a Jenkins para acceder a nuestro repositorio Git, para lo que necesitas configurar unas credenciales de acceso. Para ello, en el menú principal de Jenkins pincha sobre la opción “Credentials”. Verás una tabla donde puedes crear distintos dominios de credenciales. Para nuestro ejemplo usaremos el dominio existente “Global credentials”, por lo que haz click sobre él.

Credenciales Dominio Jenkins

Crea una nueva credencial de tipo Username with password. Ten en cuenta que el usuario y password que configures son los de tu cuenta de Bitbucket.

Jenkins - Credenciales BitBucket

Una vez configuradas las credenciales de acceso a Git, estamos listos para crear nuestro primer job

HelloWorldCI-Develop

El objetivo de este job será comprobar si se han producido cambios en el repositorio Git. En caso afirmativo, realizará una construcción del código y lo analizará. Para crear una nuevo job, en el menú principal de Jenkins encontrarás la opción “Nueva Tarea”. Haz click sobre ella y selecciona la opción “Crear un proyecto maven”.

Jekins - Crear Nueva Tarea Maven

 

Cuando finalices, pulsa OK para crear el job. A continuación vamos a configurarlo. Para ello accede a la opción de menú “Configurar” y rellena cada uno de los siguientes apartados que se indican a continuación:

  • Descripción: Indicar objetivo y funciones que realizará el job

Objetivos y funciones que realizará el job cuando se ejecute en Jenkins

  • Histórico de ejecuciones: Cada vez que Jenkins ejecuta un job, guarda un histórico con el resultado. Con el fin de optimizar el espacio en disco, es recomendable establecer un número máximo de ejecuciones históricas que serán guardadas. En nuestro caso, indicaremos un máximo de 10 ejecuciones. Para ello, lo primer tendrás que seleccionar el checkDesechar ejecuciones antiguas”.

Número máximo de ejecuciones históricas que registrará Jenkins

 

  • Repositorio Git: En el apartado “Configurar el origen de código fuente” debes indicar el repositorio Git al que se va a conectar Jenkins para descargar la aplicación:

Configuración del repositorio Git al que se debe conectar Jenkins para descargar la aplicación.

 

  • Disparadores (Triggers): Aquí vamos a establecer que el job se lance cada vez que se produzca un cambio en el repositorio Git. Por simplicidad, para nuestro ejemplo vamos a realizar un Polling contra el respositorio, realizando consultas periódicas cada 10 minutos para detectar si ha producido algún cambio en el código fuente de nuestra aplicación

Configuración de Triggers en Jenkins

 

  • Construcción (Build): Indicaremos a Jenkins como realizar la construcción de nuestra aplicación. Dado que estamos construyendo un proyecto Maven, es necesario indicar la ubicación del fichero pom.xml y las fases que queremos ejecutar, que serán clean install, con el objetivo de asegurar que se limpia el workspace antes de realizar la build y que se instalan todos los artefactos en el repositorio local de Maven.

Configuración de las fases de maven que vamos a ejecutar en el Job

  • Análisis de código: Lo siguiente será indicar a Jenkins que ejecute SonarQube para analizar el código fuente tras realizar la build. Para ello, localiza el apartado “Acciones para realizar después”, abre el combo “Añadir una acción” y selecciona la opción SonarQube. Cuando lo hayas hecho, pulsa sobre el botón “Avanzado” para configurar la propiedad -Dsonar.sourceEncoding=UTF-8 con el fin de indicar a SonarQube que los ficheros de código fuente están codificados con UTF-8:

Combo en Jenkins para seleccionar la opción de lanzar SonarQube

 

Configuración de la propiedad en Sonar para trabajar con UTF-8

 

Con estos pasos hemos finalizado la configuración de nuestro primer Job. Para ejecutarlo, bien puedes esperar el intervalo de tiempo que configuramos previamente (10 minutos) o bien puedes lanzarlo manualmente desde la opción de menú “Construir ahora”. En la página principal de Jenkins podrás ver el resultado de la ejecución del job. (Recuerda asegurarte de tener levantado el servidor de MySQL y SonarQube antes de lanzar el job o el resultado será fallido).

Resultado ejecución de un job en Jenkins

 

Si accedes a SonarQube, podrás comprobar el resultado del análisis de código que se realizó tras construcción del código.

Resultado en SonarQube tras lanzar la ejecución de un Job en Jenkins

 

HelloWorldCI-Publish

El objetivo de este job será realizar la publicación de nuestra aplicación en un repositorio de artefactos como es Nexus OSS. Una vez realizada la publicación, nuestro artefacto estará listo para ser utilizado como dependencia de otros sistemas o ser desplegado en un entorno determinado (CERT, PRE o PRO).

Lo primero que haremos será configurar Maven para que tenga acceso a nuestro Nexus OSS y pueda realizar publicaciones. Para ello asegúrate que en el fichero pom.xml del artefacto que vas a publicar, se indica el repositorio donde se desplegaran las versiones generadas por el proyecto, tanto estables como snapshots. Ten en cuenta que si no especificas el repositorio de snapshots, todas las publicaciones se realizarán sobre el mismo repositorio indicado en el tag repository 

	 <distributionManagement>
		<repository>
			<id>nexus</id>
			<url>http://localhost:8081/nexus/content/repositories/releases</url>
		</repository>
		<snapshotRepository>
			<id>nexus</id>
			<url>http://localhost:8081/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

Para que Maven tenga permisos para publicar en Nexus OSS, tendremos que configurar unas credenciales de acceso. Para simplificar el ejemplo, configuraremos el usuario administrador de Nexus OSS en el fichero settings.xml, ubicado en la carpeta conf/ del directorio de instalación de Maven.

	<servers>
		<server>
			<id>nexus</id>
			<username>admin</username>
			<password>admin123</password>
		</server>
	</servers>

Una vez configurado Maven, ya estamos preparados para crear un nuevo job en Jenkins. A diferencia del job HelloWorldCI-develop, la ejecución de este nuevo será manual. Lo lanzaremos cada vez  que tengamos una versión estable de nuestra aplicación que queramos liberar.

Para generar una versión de nuestra aplicación, usaremos el plugin maven-release-plugin que ejecuta las siguientes fases de Maven antes de realizar la publicación del artefacto:

  • release:prepare, que realiza las siguientes operaciones:
    • Chequea que no haya cambios en los fuentes sin subir a Git
    • Chequea que todas las dependencias del proyecto son releases (no hay SNAPSHOTS)
    • Cambia la versión de todos los artefactos involucrados, quitando el SNAPSHOT
    • Inserta en la sección SCM del POM la información del TAG que se va a realizar
    • Ejecuta todos los test sobre el POM modificado, para asegurar que todo sigue funcionando correctamente
    • Realiza el commit de los POM modificados
    • Marca el código recién subido con una etiqueta que representa la versión que se ha generado
    • Vuelve a modificar la versión en los POM para que sea la siguiente versión a desarrollar, seguida del tag SNAPSHOT
    • Realiza el commit de los POM con la siguiente versión, de manera que los desarrolladores puedan empezar a trabajar en la nueva versión.
  • release:perform, para publicar en el repositorio de artefactos una versión previamente subida al repositorio. Se realizan dos tareas:
    • Se descarga del sistema de control de versiones el último TAG de versión
    • Genera el artefacto y lo sube al repositorio de artefactos (ejecuta mvn deploy)

Para facilitar la construcción de este nuevo job, partiremos del que ya teníamos creado (HelloWorldCI-develop), lo clonaremos y asignaremos un nuevo nombre: HelloWorldCI-publish

Clonación de un job en Jenkins

 

Modifica la descripción del job que acabas de crear para indicar algo de este estilo: “Este job se lanzará manualmente para publicar un nuevo artefacto en el repositorio de artefactos de nexus”

 Localiza el apartado “Configurar el origen del código fuente”. Dentro de esta sección observarás que hay un botón para añadir nuevos comportamientos. Haz click y selecciona “check out to specific local branch”.

Job-SCM new behaviour

 

Y escribe “master” en el campo de texto “Branch name”:

Job-MasterBranch

 

Como en este caso, la ejecución del job será manual, desactivamos todos los disparadores que haya seleccionados:

Deshabilitamos los triggers seleccionados

Lo siguiente que haremos será modificar los goals de job. En el apartado Proyecto, encuentra el campo de texto “Goles y opciones” y escribe deploy.

Goal Deploy

 

Por último, elimina la acción posterior de ejecución de Sonar que aparece configurada:

Eliminar acción sonarQube

 

Guarda todos los cambios y vuelve al menú principal de Jenkins. Lo siguiente que haremos será instalar el plugin Maven Release Plug-in Plug-in siguiendo los mismos pasos que vimos en el post anterior (Recuerda reiniciar Jenkins después de la instalación)

Maven Release Plugin

 

Entra de nuevo a la configuración del job y localiza una nueva sección llamada “Entorno de Ejecución” y haz click en el check “Maven reléase build”.

Check Maven Release Build

 

Cuando guardes los cambios, podrás observar que en el menú de la izquierda aparece una nueva opción llamada “Perform Maven Release”

Nueva opción de menu Perform maven release

 

Pincha sobre la nueva opción para establecer la versión de publicación que vas a generar así como la siguiente versión sobre la que el equipo de desarrollo comenzará a trabajar. También debes indicar las credenciales de acceso al Git.

Configuración del plugin Perform Maven Release

Haz click sobre el botón “Schedule Maven Release Build” para lanzar una ejecución del job. Asegurate que el servidor de Nexus OSS esté levantando antes de la ejecución. Si todo fue bien, deberías poder ver la nueva reléase publicada en Nexus OSS.

Ejemplo de release publicada en Nexus

Si accedes a tu repositorio Git, comprobaras que Maven ha generado nuevos commits. En este caso, comprobaras que se ha actualizado la versión en el fichero pom.xml

Commit en Git tras realizar una release y publicarla en Nexus

 

Felicidades!! acabas de publicar tu primer artefacto. Te animo a seguir profundizando y descubriendo nuevas opciones y multitud de posibilidades que nos ofrecen las herramientas del entorno de integración continua que acabas de montar.

 

A clock containing the life cycle of continuous integration.

Jenkins – Aprende a Montar un Entorno de Integración Continua (IV)

Jenkins será el componente que ejerza como servidor de integración continua en el entorno que estamos montando. Si finalizaste con éxito la instalación de SonarQube y Nexus OSS, pasemos a instalar y configurar Jenkins.

read more