Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Jó nap, Habr!

Ma az egyik felhasználási módot szeretném megosztani Active Choices beépülő modul végezze el a feladatot Jenkins a legegységesebb és leginkább felhasználóbarát.

Bevezetés

A DevOps rövidítés már nem újdonság az informatikai közösség számára. Sokak számára a „do DevOps” kifejezés valamilyen varázsgombhoz asszociál, rákattintásra az alkalmazás kódja automatikusan egy telepített és tesztelt alkalmazássá változik (igazából minden bonyolultabb, de elvonatkoztatunk minden folyamattól).

Így megrendelést kaptunk egy ilyen varázsgomb elkészítésére, hogy a rendszergazdák egy kattintással telepíthessék az alkalmazást. Ennek a feladatnak különféle megvalósítási módjai vannak: a bot írásától az azonnali üzenetküldőkhöz egy külön alkalmazás fejlesztéséig. Mindazonáltal mindennek ugyanaz a célja - hogy az alkalmazás felépítésének és telepítésének megkezdése a lehető legátláthatóbb és kényelmesebb legyen.

A mi esetünkben használni fogjuk Jenkins.


Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Feladat

Hozzon létre egy kényelmes Jenkins-feladatot, amely elindítja egy bizonyos verzió kiválasztott mikroszolgáltatásának felépítését és (vagy) telepítését.

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Beviteli adat

Számos adattárral rendelkezünk, amelyek különféle mikroszolgáltatások forráskódját tartalmazzák.

Paraméterek meghatározása

Munkánk bemeneteként a következő paramétereket kell megkapni:

  1. Annak a mikroszolgáltatási kóddal rendelkező tárhelynek az URL-címe, amelyet fel akarunk építeni és telepíteni szeretnénk a feladat futtatásakor.
  2. Annak a véglegesítésnek az azonosítója, amelyből a build megtörténik.

AMINT AZ

Ennek a feladatnak a legegyszerűbb módja két String típusú paraméter létrehozása.

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Ebben az esetben a felhasználónak kézzel kell megadnia a tárhely elérési útját és a véglegesítési azonosítót, ami, látod, nem teljesen kényelmes.

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

A HOGY LEGYEN

Most próbáljunk ki egy másik típusú paramétert, hogy megvizsgáljuk minden előnyét.
Hozzuk létre az első paramétert Choice Parameter típussal, a másodikat - Active Choices Reactive Reference Parameter. A Choice típusú paraméterben a Choices mezőbe manuálisan hozzáadjuk azoknak a tárolóknak a nevét, ahol mikroszolgáltatásaink kódja van tárolva.

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Ha a közönségnek tetszik ez a cikk, akkor a következő cikkben leírom a Jenkins-ben a feladatok konfigurálásának folyamatát, kódon keresztüli leírás segítségével (Configuration as code), pl. nem kell manuálisan megadnunk a lerakatneveket és létrehoznunk a paramétereket, minden automatikusan megtörténik (a kódunk megkapja a tárolók listáját az SCM-től, és ezzel a listával létrehoz egy paramétert).

A második paraméter értékei dinamikusan töltődnek ki, attól függően, hogy az első paraméter milyen értéket vesz fel (test1 vagy teszt2), mivel minden adattárnak megvan a saját véglegesítési listája.

Active Choices Reaktív referenciaparaméter a következő mezőket kell kitölteni:

  1. Név – paraméter neve.
  2. Forgatókönyv – kód, amely minden alkalommal lefut, amikor a Hivatkozott paraméter mezőben szereplő paraméter értéke megváltozik (esetünkben, amikor a teszt1 és a teszt2 között választunk).
  3. Leírás – a paraméter rövid leírása.
  4. Választás típusa – a szkript által visszaadott objektum típusa (esetünkben html kódot adunk vissza).
  5. Hivatkozott paraméter – annak a paraméternek a neve, amelynek értékének megváltoztatásakor a Script szekció kódja kerül végrehajtásra.

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Folytassa közvetlenül a paraméter legfontosabb mezőjének kitöltésével. Kétféle megvalósítási mód közül választhatunk: a felhasználás Groovy forgatókönyv vagy Scriptler Script.
Az elsőt választjuk, mivel a Scriptler csak egy beépülő modul, amely elmenti a korábban megírt szkripteket, és lehetővé teszi, hogy más feladatokban is felhasználhassa őket, anélkül, hogy ismételten másolást kellene beilleszteni.

Groovy kód az összes véglegesítés lekéréséhez a kiválasztott tárolóból:

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

Anélkül, hogy belemennénk a részletekbe, ez a kód bemenetként megkapja a mikroszolgáltatás nevét (MICROSERVICE_NAME), és kérést küld Bitbucket (módszer getCommitsForMicroservice).
Amint korábban említettük, ennek a kódnak az oldalon megjelenő html-t kell visszaadnia Építsd paraméterekkel Jenkinsben, ezért a Bitbuckettől kapott összes értéket listába foglaljuk, és hozzáadjuk őket a kiválasztáshoz.

Az összes lépés elvégzése után egy ilyen szép oldalt kell kapnunk Építsd paraméterekkel.

Ha a teszt1 mikroszolgáltatást választotta:

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Ha a teszt2 mikroszolgáltatást választotta:

Dinamikus paraméterek létrehozása egy Jenkins-feladatban, vagy hogyan teheti felhasználóbaráttá a feladatot

Fogadd el, hogy a felhasználó számára sokkal kényelmesebb lesz így kommunikálni a feladatoddal, mint minden alkalommal átmásolni az url-t, és megkeresni a szükséges véglegesítési azonosítót.

PS Ez a cikk egy nagyon leegyszerűsített példát mutat be, aminek ebben a formában nem biztos, hogy a gyakorlati haszna van, mivel az összeállításoknak sokkal több különböző paramétere van, de ennek a cikknek az volt a célja, hogy bemutassa az eszköz működését, nem pedig a működő megoldást.

PSS Ahogy korábban írtam, ha hasznos lesz ez a cikk, akkor a következő kb Jenkins feladatok dinamikus konfigurálása kódon keresztül.

Forrás: will.com

Hozzászólás