Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Hyvää päivää, Habr!

Tänään haluan jakaa yhden käyttötavoista Active Choices -laajennus tee tehtävä sisään Jenkins yhtenäisin ja käyttäjäystävällisin.

Esittely

Sellainen lyhenne kuin DevOps ei ole enää mikään uusi IT-yhteisölle. Monille ihmisille ilmaus "do DevOps" liittyy jonkinlaiseen taikapainikkeeseen, kun sitä napsautetaan, sovelluskoodi muuttuu automaattisesti käyttöönotetuksi ja testatuksi sovellukseksi (kaikki on itse asiassa monimutkaisempaa, mutta vedämme pois kaikista prosesseista).

Joten saimme tilauksen tehdä tällainen taikapainike, jotta järjestelmänvalvojat voisivat ottaa sovelluksen käyttöön yhdellä napsautuksella. Tämän tehtävän toteuttamistapoja on useita: botin kirjoittamisesta mille tahansa pikaviestintälle erillisen sovelluksen kehittämiseen. Kaikella tällä on kuitenkin sama tavoite - tehdä sovelluksen rakentamisen ja käyttöönoton aloittamisesta mahdollisimman läpinäkyvää ja kätevää.

Meidän tapauksessamme käytämme Jenkins.


Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Tehtävä

Luo kätevä Jenkins-työ, joka käynnistää tietyn version valitun mikropalvelun rakentamisen ja (tai) käyttöönoton.

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Syötä tiedot

Meillä on useita arkistoja, jotka sisältävät erilaisten mikropalvelujen lähdekoodia.

Parametrien määrittely

Seuraavat parametrit tulisi saada syötteenä työhömme:

  1. Sen mikropalvelukoodin sisältävän arkiston URL-osoite, jonka haluamme rakentaa ja ottaa käyttöön työn suorittamisen aikana.
  2. Sen sitoumuksen tunnus, josta rakennus tehdään.

KUTEN ON

Helpoin tapa suorittaa tämä tehtävä on luoda kaksi String-tyyppistä parametria.

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Tässä tapauksessa käyttäjän on syötettävä manuaalisesti polku arkistoon ja toimitustunnus, mikä ei ole täysin kätevää.

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

KUIN OLLAAN

Kokeillaan nyt toisen tyyppisiä parametreja tarkastellaksemme kaikkia sen etuja.
Luodaan ensimmäinen parametri tyypiltään Choice Parameter, toinen - Active Choices Reactive Reference Parameter. Vaihtoehto-tyypin parametriin lisäämme manuaalisesti Choices-kenttään niiden arkiston nimet, joihin mikropalveluidemme koodi on tallennettu.

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Jos yleisö pitää tästä artikkelista, niin seuraavassa artikkelissa kuvailen tehtävien konfigurointiprosessia Jenkinsissä käyttämällä kuvausta koodin kautta (Configuration as code), ts. meidän ei tarvitse syöttää arkiston nimiä ja luoda parametreja manuaalisesti, kaikki tapahtuu automaattisesti (koodimme saa luettelon arkistoista SCM:ltä ja luo parametrin tällä luettelolla).

Toisen parametrin arvot täytetään dynaamisesti sen mukaan, minkä arvon ensimmäinen parametri ottaa (test1 tai testi2), koska jokaisella arkistolla on oma toimitusluettelonsa.

Active Choices Reaktiivinen viiteparametri on täytettävä seuraavat kentät:

  1. Nimi – parametrin nimi.
  2. Käsikirjoitus – koodi, joka suoritetaan aina, kun parametrin arvoa Viittausparametri-kentästä muutetaan (tässä tapauksessa, kun valitsemme testi1:n ja testi2:n välillä).
  3. Kuvaus – parametrin lyhyt kuvaus.
  4. Valintatyyppi – komentosarjan palauttaman objektin tyyppi (tässä tapauksessa palaamme html-koodin).
  5. Viitattu parametri – parametrin nimi, jonka arvoa muuttaessa suoritetaan Script-osion koodi.

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Jatketaan suoraan tämän parametrin tärkeimmän kentän täyttämiseen. Valittavana on kaksi toteutustyyppiä: käyttämällä Groovy-käsikirjoitus tai Scriptler Script.
Valitsemme ensimmäisen, koska Scriptler on vain laajennus, joka tallentaa aiemmin kirjoittamasi skriptit ja antaa sinun käyttää niitä muissa tehtävissä ilman kopiointia uudelleen.

Groovy-koodi saadaksesi kaikki toimitukset valitusta arkistosta:

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

Menemättä yksityiskohtiin tämä koodi vastaanottaa mikropalvelun nimen (MICROSERVICE_NAME) syötteenä ja lähettää pyynnön Bitbucket (menetelmä getCommitsForMicroservice).
Kuten aiemmin mainittiin, tämän koodin pitäisi palauttaa sivulla näkyvä html Rakenna parametreilla Jenkinsissä, joten käärimme kaikki Bitbucketista vastaanotetut arvot luetteloon ja lisäämme ne valitaksesi.

Kun kaikki vaiheet on suoritettu, meidän pitäisi saada niin kaunis sivu Rakenna parametreilla.

Jos valitsit test1-mikropalvelun:

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Jos valitsit test2-mikropalvelun:

Dynaamisten parametrien luominen Jenkins-työssä tai kuinka tehdä tehtävästäsi käyttäjäystävällinen

Hyväksy, että käyttäjän on paljon helpompaa olla vuorovaikutuksessa tehtäväsi kanssa tällä tavalla kuin kopioida url joka kerta ja etsiä vaadittua sitoutumistunnusta.

PS. Tämä artikkeli tarjoaa hyvin yksinkertaistetun esimerkin, josta ei välttämättä ole tässä muodossa käytännön hyötyä, koska kokoonpanoissa on paljon enemmän erilaisia ​​parametreja, mutta tämän artikkelin tarkoituksena oli näyttää kuinka työkalu toimii, ei tarjota toimivaa ratkaisua.

PSS Kuten aiemmin kirjoitin, jos tämä artikkeli on hyödyllinen, seuraava on noin Jenkins-tehtävien dynaaminen konfigurointi koodin avulla.

Lähde: will.com

Lisää kommentti