Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Bo día, Habr!

Hoxe gustaríame compartir unha das formas de usar Complemento de opcións activas facer a tarefa en Jenkins o máis unificado e fácil de usar.

Introdución

Unha abreviatura como DevOps xa non é algo novo para a comunidade de TI. Para moitas persoas, a frase "facer DevOps" está asociada a algún tipo de botón máxico, cando se fai clic, o código da aplicación convértese automaticamente nunha aplicación implementada e probada (en realidade todo é máis complicado, pero abstraémonos de todos os procesos).

Entón, recibimos unha orde para facer un botón máxico deste tipo para que os administradores puidesen implementar a aplicación cun só clic. Existen varios tipos de implementación desta tarefa: desde escribir un bot para calquera dos mensaxeiros instantáneos ata desenvolver unha aplicación separada. Non obstante, todo isto ten o mesmo obxectivo: facer que o inicio da construción e implantación da aplicación sexa o máis transparente e cómodo posible.

No noso caso utilizaremos Jenkins.


Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Tarefa

Crea un traballo de Jenkins cómodo que iniciará a compilación e (ou) a implantación do microservizo seleccionado dunha determinada versión.

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Datos de entrada

Temos varios repositorios que conteñen o código fonte de varios microservizos.

Definición de parámetros

Os seguintes parámetros deberían recibirse como entrada para o noso traballo:

  1. O URL do repositorio co código do microservizo que queremos construír e implementar ao executar o traballo.
  2. ID do commit desde o que se producirá a compilación.

COMO É

A forma máis sinxela de realizar esta tarefa é crear dous parámetros de tipo String.

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Neste caso, o usuario terá que introducir manualmente o camiño ao repositorio e o identificador de commit, o que, ves, non é totalmente conveniente.

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

COMO SER

Agora imos probar outro tipo de parámetros para considerar todas as súas vantaxes.
Imos crear o primeiro parámetro co tipo Choice Parameter, o segundo - Active Choices Reactive Reference Parameter. No parámetro co tipo Choice, engadiremos manualmente no campo Choices os nomes dos repositorios onde se almacena o código dos nosos microservizos.

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Se ao público gústalle este artigo, no seguinte artigo describirei o proceso de configuración de tarefas en Jenkins, utilizando unha descrición a través do código (Configuración como código), é dicir. non necesitaremos introducir manualmente os nomes dos repositorios e crear parámetros, todo ocorrerá automaticamente (o noso código recibirá unha lista de repositorios de SCM e creará un parámetro con esta lista).

Os valores do segundo parámetro encheranse de forma dinámica, dependendo do valor que tome o primeiro parámetro (test1 ou test2), porque cada repositorio ten a súa propia lista de commits.

Opcións activas Parámetro de referencia reactiva ten os seguintes campos para cubrir:

  1. nome - nome do parámetro.
  2. Escrita – código que se executará cada vez que se cambie o valor do parámetro do campo Parámetro referenciado (no noso caso, cando escollemos entre test1 e test2).
  3. descrición – Breve descrición do parámetro.
  4. Tipo de elección – o tipo de obxecto devolto polo script (no noso caso devolveremos código html).
  5. Parámetro referenciado – o nome do parámetro, cando se modifica o seu valor, executarase o código da sección Script.

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Proceda directamente a cubrir o campo máis importante deste parámetro. Ofrécense dous tipos de implementación para escoller: usar Guión Groovy ou Guión Scriptler.
Escollemos o primeiro, xa que Scriptler é só un complemento que garda os scripts que escribiu previamente e que permite utilizalos noutras tarefas sen volver a copiar e pegar.

Código groovy para obter todos os commits do 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()

Sen entrar en detalles, este código recibe o nome do microservizo (MICROSERVICE_NAME) como entrada e envía unha solicitude a Bitbucket (método getCommitsForMicroservice) usando a súa API e obtén o identificador e a mensaxe de confirmación de todas as confirmacións dun microservizo determinado.
Como se mencionou anteriormente, este código debería devolver html que se mostrará na páxina Construír con parámetros en Jenkins, polo que envolvemos todos os valores recibidos de Bitbucket nunha lista e engadímolos para seleccionar.

Despois de completar todos os pasos, deberíamos obter unha páxina tan fermosa Construír con parámetros.

Se seleccionaches o microservizo test1:

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Se seleccionaches o microservizo test2:

Creación de parámetros dinámicos nun traballo de Jenkins ou como facer que a súa tarefa sexa fácil de usar

Acepta que será moito máis cómodo para o usuario interactuar coa túa tarefa deste xeito que copiar o URL cada vez e buscar o identificador de commit necesario.

PS Este artigo ofrece un exemplo moi simplificado, que pode non ser de utilidade práctica neste formulario, xa que os conxuntos teñen moitos máis parámetros diferentes, pero o propósito deste artigo era mostrar como funciona a ferramenta, non proporcionar unha solución de traballo.

PSS Como escribín anteriormente, se este artigo é útil, o seguinte será sobre configuración dinámica de tarefas de Jenkins mediante código.

Fonte: www.habr.com

Engadir un comentario