Buen dia, Habr !
Hoy me gustaría compartir una de las formas de usar el complemento Active Choices para hacer que la tarea en Jenkins sea la más unificada y comprensible para el usuario.
Introduccion
Una abreviatura como DevOps ya no es algo nuevo para la comunidad de TI. Para muchas personas, la frase "make DevOps" está asociada con algún tipo de botón mágico, cuando haces clic en él, el código de la aplicación se convierte automáticamente en una aplicación implementada y probada (todo es más complicado, pero hacemos un resumen de todos los procesos).
Entonces, recibimos una orden para hacer un botón mágico para que los administradores puedan implementar la aplicación con un solo clic. Hay varios tipos de implementación de esta tarea: desde escribir un bot para cualquiera de los mensajeros hasta desarrollar una aplicación separada. Sin embargo, el propósito de todo esto es el mismo: hacer que el lanzamiento del ensamblaje y la implementación de la aplicación sea lo más transparente y conveniente.
En nuestro caso, usaremos Jenkins .
Desafío
Cree un trabajo conveniente de Jenkins que ejecute el ensamblaje y / o implementación del microservicio seleccionado de una determinada versión.
Datos de entrada
Tenemos varios repositorios que contienen el código fuente de varios microservicios.
Parámetro Definición
Los siguientes parámetros deben ingresar la entrada de nuestro trabajo:
- La URL del repositorio con el código de microservicio que queremos recopilar e implementar al iniciar el trabajo.
- Identificación del commit desde el que se realizará la asamblea.
TAL CUAL
La forma más fácil de realizar la tarea es crear dos parámetros de tipo String.
En este caso, el usuario necesitará ingresar manualmente la ruta al repositorio y confirmar la identificación, lo cual, como verá, no es del todo conveniente.
COMO SER
Ahora intentemos un tipo diferente de parámetro para considerar todas sus ventajas.
Cree el primer parámetro de tipo Choice Parameter, el segundo - Active Choices Reactive Reference Parameter. En el parámetro con el tipo Elección, agregaremos manualmente los nombres de los repositorios donde el código de nuestros microservicios se almacena en el campo Opciones.
Si al público le gusta este artículo, en el próximo artículo describiré el proceso de configuración de tareas en Jenkins utilizando la descripción a través del código (Configuración como código), es decir. no necesitamos ingresar manualmente los nombres de los repositorios y crear parámetros, todo sucederá automáticamente (nuestro código recibirá una lista de repositorios de SCM y creará un parámetro con esta lista).
Los valores del segundo parámetro se completarán dinámicamente con nosotros, dependiendo del valor que tome el primer parámetro (test1 o test2), porque cada repositorio tiene su propia lista de confirmaciones.
El parámetro de referencia reactivo Active Choices tiene los siguientes campos para completar:
- Nombre : el nombre del parámetro.
- Script : el código que se ejecutará cada vez que se cambie el valor del parámetro del campo Parámetro referenciado (en nuestro caso, cuando elegimos entre test1 y test2).
- Descripción : una breve descripción del parámetro.
- Tipo de elección : el tipo de objeto devuelto por el script (en nuestro caso, devolveremos el código html).
- Parámetro referenciado : el nombre del parámetro, al cambiar el valor del cual se ejecutará el código de la sección Script.
Procedemos directamente a completar el campo principal en este parámetro. Se nos ofrecen dos tipos de implementación para elegir: usar Groovy Script o Scriptler Script .
Seleccionamos el primero, ya que Scriptler es solo un complemento que guarda los scripts que ya escribió y le permite usarlos en otras tareas sin tener que copiar de nuevo.
Código maravilloso para obtener todas las confirmaciones del repositorio seleccionado:
AUTH = " Base64" GIT_URL = "url SCM (https://bitbucket.org/)" PROJECT_NAME = " , " def htmlBuild() { html = """ <html> <head> <meta charset="windows-1251"> <style type="text/css"> div.grayTable { text-align: left; border-collapse: collapse; } .divTable.grayTable .divTableCell, .divTable.grayTable .divTableHead { padding: 0px 3px; } .divTable.grayTable .divTableBody .divTableCell { font-size: 13px; } </style> </head> <body> """ def commitOptions = "" getCommitsForMicroservice(MICROSERVICE_NAME).each { commitOptions += "<option style='font-style: italic' value='COMMIT=${it.getKey()}'>${it}</option>" } html += """<p style="display: inline-block;"> <select id="commit_id" size="1" name="value"> ${commitOptions} </select></p></div>""" html += """ </div> </div> </div> </body> </html> """ return html } def getCommitsForMicroservice(microserviceRepo) { def commits = [:] def endpoint = GIT_URL + "/rest/api/1.0/projects/${PROJECT_NAME}/repos/${microserviceRepo}/commits" def conn = new URL(endpoint).openConnection() conn.setRequestProperty("Authorization", "Basic ${AUTH}") def response = new groovy.json.JsonSlurper().parseText(conn.content.text) response.values.each { commits.put(it.displayId, it.message) } return commits } return htmlBuild()
Sin entrar en detalles, este código recibe el nombre del microservicio (MICROSERVICE_NAME) como entrada, envía una solicitud a Bitbucket (método getCommitsForMicroservice ) utilizando su API y recibe el mensaje de identificación y confirmación de todos los compromisos para este microservicio.
Como se mencionó anteriormente, este código debería devolver el html que se mostrará en la página Compilar con parámetros en Jenkins, por lo que ajustamos todos los valores recibidos de Bitbucket en la lista y los agregamos para seleccionar.
Después de completar todos los pasos, deberíamos obtener una página tan hermosa Construir con parámetros .
Si selecciona microservicio test1:
Si elige microservicio test2:
Acuerde que será mucho más conveniente para el usuario interactuar con su tarea de esta manera que copiar la URL cada vez y buscar la identificación de confirmación necesaria.
PD Este artículo proporciona un ejemplo muy simplificado, que puede no tener una aplicación práctica de esta forma, ya que los ensambles tienen parámetros mucho más diferentes, pero el propósito de este artículo era mostrar el funcionamiento de la herramienta y no proporcionar una solución de trabajo.
PSS Como escribí anteriormente, si este artículo es útil, el siguiente será sobre la configuración dinámica de las tareas de Jenkins usando código .