viernes, junio 23, 2017

jenkins approval, como hacer la lista de approvers de manera dinámica.

Algunas veces en el proceso de despliegue se necesita que alguien de un visto bueno o que alguien apruebe de forma manual un despliegue, aunque no es conveniente para continous delivery algunas reglas de negocio son así, pare esto jenkins dispone del plugin Promoted builds que nos permite configurar quien de forma manual una aprobación.

Se puede leer un buen caso de uso en este blog de cloudbees, empecemos a configurarlo para ver la problemática de este caso. Para activar la promoción se debe de activar la casilla "Promote builds when..."


En este ejemplo una vez que se ejecute el job de jenkins la promoción manual solo pintará en el log "despliegue" y solo lo podrá aprobar el usuario admin.


se puede ver el botón approve para el usuario admin y la salida sería:

Started by user admin
Building in workspace /var/lib/jenkins/workspace/test-approve
Promoting test-approve #1
[test-approve] $ /bin/sh -xe /tmp/jenkins552387212222026236.sh
+ echo despliegue
despliegue
build hudson.tasks.Shell@38223f2c SUCCESS
Finished: SUCCESS


Este plugin no dispone de una manaera de hacer que esta lista sea dinámica mediante variables del tipo $APPROVERS_LIST en el campo de  Approvers por lo que tenemos que modificar el job cada que se nos pida un nuevo approver.

Para solucionar esta deficioencia podemos agregar approvers de forma manual agregando el plugin Environment injector plugin y activar la promoción automática con un script de groovy.

Activaremos la casilla "Prepare an environment for the run" y agregaremos la variable de ambiente APPROVERS, o como es mi caso agregué un archivo properties con la configuración de la variable.

/var/lib/jenkins/secrets/approvers.properties
APPROVERS=admin,operator,approver1


En nuestra configuración de promoción agregaremos el siguiente script de groovy, el cuál lo que hace es modificar los approvers injectando la lista que se encuentre en APPROVERS




Y lo más importante es activar "Promote immediately once the build is complete" para que se ejecute el archivo de groovy una vez que nuestro job a sido costruido.

Ahora una vez que se construye el proyecto la lista de approvers debe de cambiar:

Dependiendo de la versión de jenkins tendrán que aprobar el uso del script de groovy, se hace en <jenkins_url>/scriptApproval/




Por alguna razón siempre hay que borrar la opción de classpath del plugin de groovy, sino jenkins se enojará mucho y nos lanzará una exception.





Dejo un caso de ejemplo en este repo, ansible-test-kitchen bastaría con ejecutarlo asi:
(master *)$ bundle exec kitchen converge default-ubuntu-promoted-builds-jenkins 

Y un pequeño video sobre este tema:


No hay comentarios.: