Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Dober dan, Habr!

Danes bi rad delil enega od načinov uporabe Vtičnik Active Choices opravi nalogo v Jenkins najbolj poenoten in uporabniku prijazen.

Predstavitev

Takšna okrajšava, kot je DevOps, ni več nekaj novega za skupnost IT. Za mnoge ljudi je besedna zveza »naredi DevOps« povezana z nekakšnim čarobnim gumbom, ko ga kliknete, se koda aplikacije samodejno spremeni v nameščeno in preizkušeno aplikacijo (v resnici je vse bolj zapleteno, vendar se abstrahiramo od vseh procesov).

Tako smo prejeli naročilo, da naredimo takšen čarobni gumb, da bi skrbniki lahko aplikacijo namestili z enim klikom. Obstajajo različne vrste izvajanja te naloge: od pisanja bota za katerega koli od hitrih sporočil do razvoja ločene aplikacije. Kljub temu ima vse to isti cilj - narediti začetek gradnje in uvajanja aplikacije čim bolj pregleden in udoben.

V našem primeru bomo uporabili Jenkins.


Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Naloga

Ustvarite priročno Jenkinsovo opravilo, ki bo zagnalo gradnjo in (ali) uvajanje izbrane mikrostoritve določene različice.

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Vhodni podatki

Imamo več repozitorijev, ki vsebujejo izvorno kodo različnih mikrostoritev.

Določitev parametrov

Naslednje parametre je treba prejeti kot vhod v naše delo:

  1. URL repozitorija s kodo mikrostoritve, ki jo želimo zgraditi in razmestiti med izvajanjem opravila.
  2. ID objave, iz katere bo izvedena gradnja.

KOT JE

To nalogo najlažje opravite tako, da ustvarite dva parametra tipa String.

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

V tem primeru bo moral uporabnik ročno vnesti pot do repozitorija in ID objave, kar, vidite, ni povsem priročno.

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

KOT BODO

Zdaj pa poskusimo drugo vrsto parametrov, da upoštevamo vse njene prednosti.
Ustvarimo prvi parameter s tipom Choice Parameter, drugi - Active Choices Reactive Reference Parameter. Pri parametru s tipom Choice bomo v polje Choices ročno dodali imena repozitorijev, kjer je shranjena koda naših mikrostoritev.

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Če je občinstvu ta članek všeč, potem bom v naslednjem članku opisal postopek konfiguriranja nalog v Jenkinsu z uporabo opisa skozi kodo (Configuration as code), tj. ne bo nam treba ročno vnašati imen repozitorijev in ustvarjati parametrov, vse se bo zgodilo samodejno (naša koda bo prejela seznam repozitorijev od SCM in ustvarila parameter s tem seznamom).

Vrednosti drugega parametra se bodo polnile dinamično, odvisno od tega, kakšno vrednost ima prvi parameter (test1 ali test2), ker ima vsak repozitorij svoj seznam potrditev.

Aktivne izbire Reaktivni referenčni parameter ima naslednja polja za izpolnitev:

  1. Ime – ime parametra.
  2. Script – koda, ki se bo izvršila ob vsaki spremembi vrednosti parametra iz polja Reference parameter (v našem primeru, ko izbiramo med test1 in test2).
  3. Opis – kratek opis parametra.
  4. Vrsta izbire – tip predmeta, ki ga vrne skript (v našem primeru bomo vrnili kodo html).
  5. Referenčni parameter – ime parametra, pri katerem se spremeni vrednost, se izvede koda iz razdelka Skripta.

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Nadaljujemo neposredno z izpolnjevanjem najpomembnejšega polja v tem parametru. Na izbiro sta nam na voljo dve vrsti izvedbe: uporaba Groovyjev scenarij ali Skripter Scriptler.
Izbrali smo prvo, saj je Scriptler le vtičnik, ki shrani skripte, ki ste jih predhodno napisali, in vam omogoča, da jih uporabite pri drugih opravilih brez ponovnega kopiranja.

Koda Groovy za pridobivanje vseh objav iz izbranega repozitorija:

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

Ne da bi se spuščali v podrobnosti, ta koda prejme ime mikrostoritve (MICROSERVICE_NAME) kot vhod in pošlje zahtevo Bitbucket (metoda getCommitsForMicroservice) z uporabo svojega API-ja ter pridobi ID in sporočilo o potrditvi vseh odobritev za dano mikrostoritev.
Kot smo že omenili, bi morala ta koda vrniti html, ki bo prikazan na strani Zgradite s parametri v Jenkinsu, tako da vse prejete vrednosti iz Bitbucketa zavijemo na seznam in jih dodamo za izbiro.

Po zaključku vseh korakov bi morali dobiti tako lepo stran Zgradite s parametri.

Če ste izbrali mikrostoritev test1:

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Če ste izbrali mikrostoritev test2:

Ustvarjanje dinamičnih parametrov v Jenkinsovem opravilu ali kako narediti svojo nalogo uporabniku prijazno

Strinjam se, da bo za uporabnika veliko bolj priročno, da na ta način komunicira z vašo nalogo, kot da vsakič kopira url in išče zahtevani ID objave.

PS Ta članek ponuja zelo poenostavljen primer, ki v tej obliki morda ni uporaben v praksi, saj imajo sklopi veliko več različnih parametrov, vendar je bil namen tega članka pokazati, kako orodje deluje, ne pa zagotoviti delujočo rešitev.

PSS Kot sem že napisal, če je ta članek koristen, bo o tem govoril naslednji dinamična konfiguracija Jenkinsovih nalog prek kode.

Vir: www.habr.com

Dodaj komentar