Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Bon dia, Habr!

Avui m'agradaria compartir una de les maneres d'utilitzar Connector Active Choices fer la tasca a Jenkins el més unificat i fàcil d'utilitzar.

Introducció

Una abreviatura com DevOps ja no és una cosa nova per a la comunitat informàtica. Per a moltes persones, la frase "fer DevOps" s'associa amb algun tipus de botó màgic, quan es fa clic, el codi de l'aplicació es converteix automàticament en una aplicació implementada i provada (en realitat tot és més complicat, però estem abstraint-nos de tots els processos).

Així doncs, vam rebre una ordre per fer aquest botó màgic perquè els administradors poguessin desplegar l'aplicació amb un sol clic. Hi ha diversos tipus d'implementació d'aquesta tasca: des d'escriure un bot per a qualsevol dels missatgers instantanis fins al desenvolupament d'una aplicació independent. Tot i això, tot això té el mateix objectiu: fer que l'inici de la creació i el desplegament de l'aplicació sigui el més transparent i còmode possible.

En el nostre cas utilitzarem Jenkins.


Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Tasca

Creeu un treball de Jenkins convenient que llançarà la compilació i (o) el desplegament del microservei seleccionat d'una versió determinada.

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Dades d'entrada

Tenim diversos repositoris que contenen el codi font de diversos microserveis.

Definició de paràmetres

Els paràmetres següents s'han de rebre com a entrada al nostre treball:

  1. L'URL del dipòsit amb el codi del microservei que volem crear i desplegar quan executem la feina.
  2. ID de la confirmació des del qual es produirà la compilació.

COM ÉS

La manera més senzilla d'aconseguir aquesta tasca és crear dos paràmetres de tipus String.

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

En aquest cas, l'usuari haurà d'introduir manualment el camí al dipòsit i l'identificador de commit, que, veieu, no és del tot convenient.

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

COM SER

Ara provem un altre tipus de paràmetres per considerar tots els seus avantatges.
Creem el primer paràmetre amb el tipus Choice Parameter, el segon - Active Choices Reactive Reference Parameter. En el paràmetre amb el tipus Choice, afegirem manualment al camp Choices els noms dels repositoris on s'emmagatzema el codi dels nostres microserveis.

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Si al públic li agrada aquest article, en el següent article descriuré el procés de configuració de tasques a Jenkins, utilitzant una descripció mitjançant codi (Configuració com a codi), és a dir. no caldrà introduir manualment noms de repositoris i crear paràmetres, tot passarà automàticament (el nostre codi rebrà una llista de repositoris de SCM i crearà un paràmetre amb aquesta llista).

Els valors del segon paràmetre s'ompliran de forma dinàmica, depenent del valor que prengui el primer paràmetre (test1 o test2), perquè cada repositori té la seva pròpia llista de commits.

Opcions actives Paràmetre de referència reactiva té els següents camps per omplir:

  1. Nom - Nom del paràmetre.
  2. Script – codi que s'executarà cada vegada que es canviï el valor del paràmetre del camp Paràmetre referenciat (en el nostre cas, quan escollim entre prova1 i prova2).
  3. Descripció - Breu descripció del paràmetre.
  4. Tipus d'elecció – el tipus d'objecte que retorna l'script (en el nostre cas tornarem codi html).
  5. Paràmetre referenciat – el nom del paràmetre, quan es canvia el valor, s'executarà el codi de la secció Script.

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Anem directament a omplir el camp més important d'aquest paràmetre. Se'ns ofereixen dos tipus d'implementació per triar: utilitzar Guió groovy o Scriptler Script.
Escollim el primer, ja que Scriptler és només un connector que desa els scripts que heu escrit prèviament i us permet utilitzar-los en altres tasques sense tornar-los a copiar i enganxar.

Codi groovy per obtenir totes les confirmacions del repositori seleccionat:

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()

Sense entrar en detalls, aquest codi rep el nom del microservei (MICROSERVICE_NAME) com a entrada i envia una sol·licitud a Bitbucket (mètode getCommitsForMicroservice) utilitzant la seva API i obté l'identificador i el missatge de confirmació de totes les confirmacions d'un microservei determinat.
Com s'ha esmentat anteriorment, aquest codi hauria de retornar l'html que es mostrarà a la pàgina Construeix amb paràmetres a Jenkins, de manera que emboliquem tots els valors rebuts de Bitbucket en una llista i els afegim per seleccionar.

Després de completar tots els passos, hauríem d'obtenir una pàgina tan bonica Construeix amb paràmetres.

Si heu seleccionat el microservei test1:

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Si heu seleccionat el microservei test2:

Creació de paràmetres dinàmics en una feina de Jenkins o com fer que la vostra tasca sigui fàcil d'utilitzar

Accepteu que serà molt més convenient per a l'usuari interactuar amb la vostra tasca d'aquesta manera que copiar l'url cada vegada i buscar l'identificador de commit requerit.

PS Aquest article proporciona un exemple molt simplificat, que pot ser que no sigui d'utilitat pràctica en aquesta forma, ja que els conjunts tenen molts més paràmetres diferents, però l'objectiu d'aquest article era mostrar com funciona l'eina, no proporcionar una solució de treball.

PSS Com he escrit abans, si aquest article és útil, el següent tractarà configuració dinàmica de les tasques de Jenkins mitjançant codi.

Font: www.habr.com

Afegeix comentari