Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Tere hea päeva! Habr!

Täna soovin jagada üht viisi, kuidas kasutades Active Choices Plugin teha ülesanne Jenkinsile kõige ühtlasemaks ja arusaadavamaks kasutajale.

Sissejuhatus

Selline lühend nagu DevOps ei ole IT kogukonna jaoks enam ammu midagi uut. Paljudele inimestele seondub fraas „teha DevOps” mingi maagilise nupuga, millele vajutades rakenduskood muudetakse automaatselt rakenduseks, mis on juurutatud ja testitud (kõik on tegelikult keerulisem, kuid me abstraheerime kõigist protsessidest).

Nii et saime tellimuse teha selline maagiline nupp, et administraatorid saaksid rakendust ühe klikiga juurutada. Selle ülesande täitmiseks on erinevaid lahendusi: alates bot'i kirjutamisest mõnesse messengeri kuni eraldi rakenduse väljatöötamiseni. Siiski on eesmärk kõigil neil ühesugune – muuta rakenduse kogumise ja juurutamise käivitamine võimalikult läbipaistvaks ja mugavaks.

Meie puhul kasutame Jenkinsile.


Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Ülesanne

Looge mugav Jenkins job, mis käivitab valitud mikroteenuse kogumise ja (või) juurutamise kindla versiooni jaoks.

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Sisendandmed

Meil on mitu hoidlat, kus asub erinevate mikroteenuste lähtekood.

Parameetrite määramine

Meie jobisse peaksid sisestama järgmised parameetrid:

  1. Hoia URL mikroteenuse koodiga, mida soovime koguda ja juurutada jobi käivitamise ajal.
  2. Commit ID, millest käivitamine toimub.

AS IS

Lihtsaim viis antud ülesande täitmiseks on luua kaks parameetrit tüübiga String.

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Sel juhul peab kasutaja käsitsi sisestama tee hoidlasse ja commit ID, mis, olgem ausad, ei ole just kõige mugavam.

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

AS TO BE

Nüüd proovime teist tüüpi parameetreid, et vaadata kõiki selle eeliseid.
Loome esimese parameetri tüübi Choice Parameter, teise – Active Choices Reactive Reference Parameter. Choice tüüpi parameetrisse lisame käsitsi Choices väljal mikroteenuste koodide hoidlate nimed.

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Kui see artikkel publikule meeldib, siis järgmises artiklis kirjeldan Jenkinsis ülesannete konfigureerimise protsessi, kasutades koodi kaudu konfigureerimist (Configuration as code), st me ei pea manuaalselt sisestama hoidlate nimesid ega looma parameetreid, kõik toimub automaatselt (meie kood saab SCM-ist hoidlate nimekirja ja loob parameetri koos selle nimekirjaga).

Teise parameetri väärtused täidetakse meil dünaamiliselt, sõltuvalt sellest, millise väärtuse esimene parameeter (test1 või test2) võtab, sest igal hoidlal on oma kommi nimekiri.

Active Choices Reactive Reference Parameter on järgmised täitmiseks vajalikud väljad:

  1. Nimi – parameetri nimi.
  2. Script – kood, mis täidetakse iga kord, kui Referenced parameter väljalt parameetri väärtus muutub (meie puhul, kui valime test1 või test2).
  3. Kirjeldus – parameetri lühikirjeldus.
  4. Choice Type – objekti tüüp, mille skript tagastab (meie puhul tagastame HTML-koodi).
  5. Referenced parameter – parameetri nimi, mille väärtuse muutumisel käivitatakse kood Scripti sektsioonis.

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Liigume edasi selle parameetri kõige olulisema väljandi täitmise juurde. Meile pakutakse valida kahe rakendamise variandi vahel: kasutades Groovy Script või Scriptler Script.
Valime esimese, kuna Scriptler on lihtsalt plugin, mis salvestab teie varem kirjutatud skriptid ja võimaldab neid kasutada teistes ülesannetes ilma uue copy-pasteta.

Groovy kood, et saada kõik kommid valitud hoidlast:

AUTH = "kasutajanimi ja parool Base64 formaadis"                           
GIT_URL = "url teie SCM jaoks (https://bitbucket.org/)"                       
PROJECT_NAME = "projekti valdkonna nimi, kus asuvad hoidlatega seotud allikad"

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

Kui mitte minna detailidesse, siis see kood võtab sisendina mikroteenuse nime (MICROSERVICE_NAME), saadab päringu Bitbucket (meetod getCommitsForMicroservice), kasutades selle API-d, ja saab kõikide kommitte id-d ja merge sõnumid antud mikroteenusele.
Nagu juba varem öeldud, peab see kood tagastama HTML-i, mis kuvatakse lehel Build with Parameters Jenkinsis, seetõttu ümbritseme kõik saadud väärtused Bitbucket'is nimekirjaga ja lisame need select-i.

Pärast kõigi toimingute lõpetamist peaksime saama sellise ilusa lehe. Build with Parameters.

Kui valiti mikroteenus test1:

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Kui valiti mikroteenus test2:

Jenkins jobi dünaamiliste parameetrite loomine või kuidas muuta teie ülesanne kasutajasõbralikuks

Nõustute, et kasutajal on märksa mugavam suhelda teie ülesandega nii, kui iga kord url-i kopeerida ja vajalikku commit id-d otsida.

P.S. Selles artiklis on toodud väga lihtsustatud näide, mis võib-olla ei oma praktilist rakendust sellisel kujul, kuna seadistustel on palju rohkem erinevaid parameetreid, kuid selle artikli eesmärk oli näidata tööriista toimimist, mitte pakkuda toimivat lahendust.

P.S.S. Nagu juba varem mainitud, kui see artikkel osutub kasulikuks, siis järgmine on teemal Jenkins'i ülesannete dünaamiline konfigureerimine koodi abil.

Allikas: habr.com

Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster