Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Bella ghjurnata, Habr!

Oghje mi piacerebbe sparte unu di i modi per aduprà Active Choices Plugin fà u compitu in Jenkins u più unificata è user-friendly.

Introduzione

Un tali abbreviazione cum'è DevOps ùn hè più qualcosa di novu per a cumunità IT. Per parechje persone, a frasa "fà DevOps" hè assuciata à qualchì tipu di buttone magicu, quandu cliccà, u codice di l'applicazione si trasforma automaticamente in una applicazione implementata è pruvata (tuttu hè in realtà più cumplicatu, ma avemu astrattu da tutti i prucessi).

Dunque, avemu ricevutu un ordine per fà un tali buttone magicu per chì l'amministratori puderanu implementà l'applicazione cun un clic. Ci sò parechji tippi di implementazione di stu compitu: da scrive un bot per qualsiasi di i messageri instantani à sviluppà una applicazione separata. Tuttavia, tuttu questu hà u stessu scopu - per fà chì l'iniziu di a custruzzione è l'implementazione di l'applicazione sia trasparente è cunvene pussibule.

In u nostru casu avemu aduprà Jenkins.


Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Objettivu

Crea un travagliu Jenkins cunvene chì lanciarà a creazione è (o) implementazione di u microserviziu sceltu di una certa versione.

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Dati di input

Avemu parechji repositori chì cuntenenu u codice fonte di diversi microservizi.

Definizione di paràmetri

I seguenti parametri devenu esse ricevuti cum'è input à u nostru travagliu:

  1. L'URL di u repositoriu cù u codice di u microserviziu chì vulemu custruisce è implementà quandu eseguisce u travagliu.
  2. ID di u commit da quale a custruzzione serà fatta.

AS IS

U modu più faciule per rializà stu compitu hè di creà dui parametri di tipu String.

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

In questu casu, l'utilizatore hà bisognu di entre manualmente u percorsu à u repository è l'identificatore di commit, chì, vede, ùn hè micca sanu cunvene.

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

COME ESSERE

Avà pruvemu un altru tipu di parametri per cunsiderà tutti i so vantaghji.
Creemu u primu paràmetru cù u tipu Choice Parameter, u sicondu - Active Choices Reactive Reference Parameter. In u paràmetru cù u tipu di Scelta, aghjunghje manualmente in u campu di Scelte i nomi di i repositori induve u codice di i nostri microservizi hè guardatu.

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Se l'audienza li piace stu articulu, allora in u prossimu articulu vi descriverà u prucessu di cunfigurà i travaglii in Jenkins, utilizendu una descrizzione attraversu codice (Configurazione cum'è codice), i.e. ùn avemu micca bisognu di inserisce manualmente i nomi di repository è creà paràmetri, tuttu succede automaticamente (u nostru codice riceverà una lista di repository da SCM è creà un paràmetru cù questa lista).

I valori di u sicondu paràmetru seranu cumpleti dinamicamente, secondu u valore di u primu paràmetru (test1 o test2), perchè ogni repository hà a so propria lista di cummissioni.

Active Choices Reactive Reference Parameter hà i seguenti campi da compie:

  1. nomu - nome di u paràmetru.
  2. script - codice chì serà eseguitu ogni volta chì u valore di u paràmetru da u campu di u paràmetru Riferitu hè cambiatu (in u nostru casu, quandu sceglite trà test1 è test2).
  3. Description - breve descrizzione di u paràmetru.
  4. Tipu di scelta - u tipu d'ughjettu riturnatu da u script (in u nostru casu vulteremu codice html).
  5. Paràmetru riferitu - u nome di u paràmetru, quandu u valore di quale hè cambiatu, u codice da a sezione Script serà eseguitu.

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Andemu direttamente à cumpiendu u campu più impurtante in stu paràmetru. Ci sò offerti dui tipi di implementazione per sceglie: usu Scrittura groovy o Scripter Script.
Scegliemu u primu, postu chì Scriptler hè solu un plugin chì salva i script chì avete scrittu prima è vi permette di usà in altre attività senza copia-incolla di novu.

Groovy code per uttene tutte e cummissioni da u repositoriu sceltu:

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 entre in dettagli, stu codice riceve u nome di u microserviziu (MICROSERVICE_NAME) cum'è input è manda una dumanda à Bitbucket (metudu getCommitsForMicroservice) utilizendu a so API, è riceve l'id è u missaghju di cummissione di tutti l'impegni per un microserviziu datu.
Comu diciatu prima, stu codice deve vultà html chì serà visualizatu nantu à a pagina Custruite cù Parametri in Jenkins, cusì avemu imballatu tutti i valori ricevuti da Bitbucket in una lista è aghjunghje à selezziunate.

Dopu à compie tutti i passi, duvemu ottene una pagina cusì bella Custruite cù Parametri.

Sè avete sceltu u microserviziu test1:

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Sè avete sceltu u microserviziu test2:

Creazione di parametri dinamichi in un travagliu Jenkins, o cumu fà a vostra attività user-friendly

Accettate chì serà assai più convenientu per l'utilizatore per interagisce cù u vostru compitu in questu modu chì copià l'url ogni volta è cercà l'id di cummissione necessariu.

PS Questu articulu furnisce un esempiu assai simplificatu, chì pò esse micca di usu praticu in questa forma, postu chì l'assemblee anu parechje più diverse paràmetri, ma u scopu di questu articulu era di vede cumu l'uttellu funziona, micca per furnisce una suluzione di travagliu.

PSS Comu aghju scrittu prima, se questu articulu hè utile, allora u prossimu sarà circa cunfigurazione dinamica di i travaglii di Jenkins via codice.

Source: www.habr.com

Add a comment