Promociona entre entornos desde Jenkins, si cumples unos mínimos de calidad

1
3241

En este tutorial veremos como configurar la promoción entre entornos desde jenkins haciendo uso del plugin de promotion
y algún aspecto avanzado adicional como bloquear una promoción si el proyecto no pasa los mínimos umbrales de calidad definidos.

Índice de contenidos.


1. Introducción

El objetivo de este tutorial es mostrar como, realizando una configuración muy básica y sin entrar en muchos detalles
podemos configurar jenkins para realizar una promoción automática o manual entre entornos de los artefactos generados
dentro del ciclo de integración continua.

El flujo es sencillo:

  • el equipo consolida el código fuente en el repositorio de SCM,
  • automáticamente se lanza una build en el entorno de CI que después de comprobar la integridad de la build, esto es:
    • el código compila
    • los tests, unitarios y de integración, pasan,
    • y se generan las métricas de calidad,

    se genera un artefacto.

  • el equipo decide promocionar al entorno de despliegue integración una build concreta generada, que haya pasado por todo el ciclo de integración, incluyendo el hecho de cumplir con unos mínimos de calidad definidos en sonar.

El entorno de despliegue de integración puede ser cualquier contenedor de aplicaciones o incluso la misma aplicación autodesplegada; en esencia es un entorno controlado e independiente en el que el equipo debería realizar las demos al usuario.

2. Entorno.

El tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil MacBook Pro 15′ (2.5 GHz Intel Core i7, 16GB DDR3).
  • Sistema Operativo: Mac OS El Capitan 10.11
  • Jenkins 2.7.3
  • Sonar 6.0


3. Ejecución de jenkins en un entorno local.

Paso a paso y haciendo uso de docker nos descargamos primero la última imagen del producto:

Una vez descargada, el siguiente paso es arrancar un contenedor basado en esa imagen,
proporcionando un nombre descriptivo:

Si accedemos a la ip de la máquina por el puerto 8080, http://192.168.99.100:8080/ veremos una pantalla como la que sigue:

jenkins-promotion-plugin-01

Esto es nuevo de la versión 2 y lo han hecho para asegurar que quien accede la primera vez al sistema y lo configura es el administrador que lo está instalando.
La contraseña la podemos encontrar en la consola del arranque del propio jenkins:

Una vez añadimos la clave, nos mostrará la siguiente ventana para instalar los plugins recomendados o los que elijamos:

jenkins-promotion-plugin-02

Tanto con una opción o la otra nos mostrará una interfaz con el progreso de la instalación de los plugins:

jenkins-promotion-plugin-03

Una vez concluya el proceso, nos pedirá que demos de alta un primer usuario:

jenkins-promotion-plugin-04

Después de lo cuál, ya tendremos Jenkins preparado para hacer nuestras pruebas:

jenkins-promotion-plugin-05

Si accedemos al host por el puerto correspondiente http://192.168.99.100:8080/ se mostrará la interfaz de login:

jenkins-promotion-plugin-14


4. El plugin en promociones.

Para instalar el plugin debemos ir a «Administrar Jenkins» > «Administrar Plugins»

jenkins-promotion-plugin-07

y buscar entre los plugins disponibles el plugin de «promoted build plugin»

jenkins-promotion-plugin-15

Lo seleccionamos y pulsamos sobre «Descargar ahora e instalar después de reiniciar»

jenkins-promotion-plugin-16

Se mostrará un mensaje como el siguiente y seleccionado «Reiniciar Jenkins cuando termine la instalación y no queden trabajos en ejecución» se reiniciará automáticamente y se instalará el plugin.

jenkins-promotion-plugin-08

Se mostrará un mensaje como el siguiente:

jenkins-promotion-plugin-09

Una vez reiniciado ya podemos crear una nueva tarea

jenkins-promotion-plugin-06

Introducimos un nombre

jenkins-promotion-plugin-10

y un tipo de proyecto, en nuestro caso un proyecto maven

jenkins-promotion-plugin-11

Pulsando «Ok» podremos acceder a la configuración de la tarea, donde podremos comprobar que aparece una
opción de «Promote builds when…»

jenkins-promotion-plugin-12

Podemos indicar:

  • un nombre a la promoción,
  • un icono que identificará una build como promocionada usando
    este tipo de promoción,
  • un listado separado por comas de las personas que podrán aprobar la promoción,

La promoción se basa en la ejecución de acciones y tenemos las siguientes opciones de configuración:

jenkins-promotion-plugin-13

Seleccionando la ejecución de una línea de comandos (shell) o un comando de windows podemos realizar
cualquier acción con el artefacto generado por la build.

La recomendación es crear un script del sistema operativo e invocarlo desde aquí parametrizado. No es buena idea
incluir en la opción de ejecución del script todo el código de modo tal que todos los jobs tengan el mismo script;
es mejor externalizarlo.

Desde el cuadro de comandos se puede acceder al listado de variables que tenemos disponibles para la ejecución del script (http://192.168.99.100:8080/env-vars.html/)
y, con ello, elaborar un script más o menos complejo, depende de lo que necesitemos hacer con el artefacto:

jenkins-promotion-plugin-17

En el siguiente ejemplo hacemos una copia del war de la build concreta al directorio de despliegue de un tomcat en un host remoto (remoteHost)

Ya os digo que la recomendación es llevar el contenido del comando a un script del sistema operativo, no mantener el código desde aquí.

A partir de ese momento, sobre una build en concreto podemos acceder a las opciones de promoción:

jenkins-promotion-plugin-19

Y, si estamos autorizados para ello «Aprobar» la promoción

jenkins-promotion-plugin-20

La build promocionada aparecerá con el icono asociado a la promoción:

jenkins-promotion-plugin-21

Y accediendo al job, podemos ver el histórico de promociones.

jenkins-promotion-plugin-22


5. ¿Podemos bloquear una promoción?.

¿Y si estableciéramos que no se puede promocionar salvo que el código del proyecto supere los mínimos de calidad
establecidos en sonar?


5.1. Marcar una build como errónea sino cumple los umbrales de calidad de sonar.

Tenemos una primera opción, que podemos hacer de una manera muy sencilla, que consiste en marcar cualquier
build como errónea si no pasa los mínimos umbrales de calidad en sonar. Una build marcada como errónea no se puede
promocionar, con lo que tendríamos todo cubierto.

Ya hemos visto como instalar plugins en jenkins, en este caso deberíamos instalar:

jenkins-promotion-plugin-18

Una vez instalado debemos configurar la instancia de sonar asociada a la configuración del plugin de Quality Gates

jenkins-promotion-plugin-23

En la configuración del job podemos añadir una acción de tipo «Quality Gates»:

jenkins-promotion-plugin-24

Y te pedirá indicar la clave del proyecto en sonar

jenkins-promotion-plugin-25

Una vez configurado, en la ejecución de las builds si no pasa el Quality Gate, la build se marcará como errónea.


5.2. Impedir una promoción sino cumple los umbrales de calidad de sonar.

El propio equipo de sonar source no está de acuerdo con la opción anterior, puesto que una cosa es no pasar los mínimos de calidad
y otra marcar como errónea una build; el resultado de un Quality Gate debería tenerse en cuenta a la hora de promocionar.

La configuración es igual de simple, con el mismo plugin, en vez de añadir la acción a la build lo añadimos a las acciones
de la promoción, anteponiéndola a la de la ejecución de la acción de promoción propiamente dicha.

jenkins-promotion-plugin-26

Con ello, no en la ejecución de la build, sino al intentar promocionar la promoción se marcará como errónea si no pasamos el Quality Gate.

jenkins-promotion-plugin-27

6. Referencias.


7. Conclusiones.

Pues ya tenemos todo el ciclo completo… ¿o no?

Recuerda que en Autentia proporcionamos servicios profesionales de soporte a desarrollo
en los que podemos ayudarte a la definición de ecosistemas de desarrollo, integración e inspección continua.

Un saludo.

Jose

1 Comentario

  1. Excelente articulo, muchas gracias, casualmente hoy estaba decidiendome si comenzar a implementar jenkins, lo tomare como una señal divina xD

Dejar respuesta

Please enter your comment!
Please enter your name here