Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Buona giornata, Habr!

Oggi vorrei condividere uno dei modi di utilizzo Plugin Scelte attive svolgere il compito Jenkins il più unificato e facile da usare.

Introduzione

Un'abbreviazione come DevOps non è più una novità per la comunità IT. Per molte persone, la frase "fai DevOps" è associata a una sorta di pulsante magico, quando viene cliccato, il codice dell'applicazione si trasforma automaticamente in un'applicazione distribuita e testata (tutto è in realtà più complicato, ma stiamo astraendo da tutti i processi).

Pertanto, abbiamo ricevuto l'ordine di creare un pulsante magico in modo che gli amministratori possano distribuire l'applicazione con un clic. Esistono vari tipi di implementazione di questa attività: dalla scrittura di un bot per uno qualsiasi dei servizi di messaggistica istantanea allo sviluppo di un'applicazione separata. Tuttavia, tutto ciò ha lo stesso obiettivo: rendere l'avvio della creazione e della distribuzione dell'applicazione il più trasparente e conveniente possibile.

Nel nostro caso useremo Jenkins.


Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Compito

Crea un comodo lavoro Jenkins che avvierà la compilazione e (o) la distribuzione del microservizio selezionato di una determinata versione.

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Dati di input

Disponiamo di diversi repository contenenti il ​​codice sorgente di vari microservizi.

Definizione dei parametri

I seguenti parametri dovrebbero essere ricevuti come input per il nostro lavoro:

  1. L'URL del repository con il codice del microservizio che vogliamo creare e distribuire durante l'esecuzione del processo.
  2. ID del commit da cui verrà eseguita la compilazione.

COME SONO

Il modo più semplice per eseguire questa attività è creare due parametri di tipo String.

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

In questo caso, l'utente dovrà inserire manualmente il percorso del repository e l'ID di commit, il che, vedi, non è del tutto conveniente.

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

COME ESSERE

Ora proviamo un altro tipo di parametri per considerarne tutti i vantaggi.
Creiamo il primo parametro con il tipo Choice Parametro, il secondo - Active Choices Reactive Reference Parametro. Nel parametro di tipo Choice, aggiungeremo manualmente nel campo Choices i nomi dei repository in cui è archiviato il codice dei nostri microservizi.

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Se al pubblico piace questo articolo, nel prossimo articolo descriverò il processo di configurazione delle attività in Jenkins, utilizzando una descrizione tramite codice (Configurazione come codice), ad es. non avremo bisogno di inserire manualmente i nomi dei repository e creare parametri, tutto avverrà automaticamente (il nostro codice riceverà un elenco di repository da SCM e creerà un parametro con questo elenco).

I valori del secondo parametro verranno riempiti dinamicamente, a seconda del valore assume il primo parametro (test1 o test2), poiché ogni repository ha il proprio elenco di commit.

Parametro di riferimento reattivo di Scelte attive ha i seguenti campi da compilare:

  1. Nome – nome del parametro.
  2. Copione – codice che verrà eseguito ogni volta che viene modificato il valore del parametro dal campo Parametro di riferimento (nel nostro caso, quando scegliamo tra test1 e test2).
  3. Descrizione – breve descrizione del parametro.
  4. Tipo di scelta – il tipo di oggetto restituito dallo script (nel nostro caso restituiremo il codice html).
  5. Parametro di riferimento – il nome del parametro, quando viene modificato il valore, verrà eseguito il codice della sezione Script.

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Procediamo direttamente alla compilazione del campo più importante in questo parametro. Ci vengono offerti due tipi di implementazione tra cui scegliere: using Script Groovy o Sceneggiatura di Scriptler.
Scegliamo il primo, poiché Scriptler è solo un plugin che salva gli script che hai scritto in precedenza e ti consente di utilizzarli in altre attività senza fare nuovamente copia e incolla.

Codice groovy per ottenere tutti i commit dal repository selezionato:

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

Senza entrare nei dettagli, questo codice riceve come input il nome del microservizio (MICROSERVICE_NAME) e invia una richiesta a bitbucket (metodo getCommitsForMicroservice) utilizzando la relativa API e ottiene l'ID e il messaggio di commit di tutti i commit per un determinato microservizio.
Come accennato in precedenza, questo codice dovrebbe restituire l'html che verrà visualizzato sulla pagina Costruisci con parametri in Jenkins, quindi racchiudiamo tutti i valori ricevuti da Bitbucket in un elenco e li aggiungiamo per selezionare.

Dopo aver completato tutti i passaggi, dovremmo ottenere una pagina così bella Costruisci con parametri.

Se hai selezionato il microservizio test1:

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Se hai selezionato il microservizio test2:

Creazione di parametri dinamici in un lavoro Jenkins o come rendere la tua attività facile da usare

Concordo sul fatto che sarà molto più conveniente per l'utente interagire con la tua attività in questo modo piuttosto che copiare l'URL ogni volta e cercare l'ID di commit richiesto.

PS Questo articolo fornisce un esempio molto semplificato, che potrebbe non essere di utilità pratica in questa forma, poiché gli assiemi hanno molti più parametri diversi, ma lo scopo di questo articolo era mostrare come funziona lo strumento, non fornire una soluzione funzionante.

PSS Come ho scritto prima, se questo articolo è utile, il prossimo riguarderà configurazione dinamica delle attività Jenkins tramite codice.

Fonte: habr.com

Aggiungi un commento