Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Dobrý deň, Habr!

Dnes by som sa rád podelil o jeden zo spôsobov použitia Active Choices Plugin vykonajte úlohu v Jenkins najviac zjednotené a užívateľsky prívetivé.

Úvod

Takáto skratka ako DevOps už nie je pre IT komunitu novinkou. Slovné spojenie „do DevOps“ sa mnohým ľuďom spája s akýmsi magickým tlačidlom, po kliknutí sa kód aplikácie automaticky zmení na nasadenú a otestovanú aplikáciu (v skutočnosti je všetko komplikovanejšie, ale abstrahujeme od všetkých procesov).

Dostali sme teda príkaz vyrobiť také magické tlačidlo, aby administrátori mohli aplikáciu nasadiť jedným kliknutím. Existujú rôzne typy implementácie tejto úlohy: od napísania bota pre ktoréhokoľvek z instant messengerov až po vývoj samostatnej aplikácie. Napriek tomu má toto všetko rovnaký cieľ – urobiť spustenie zostavovania a nasadzovania aplikácie čo najtransparentnejšie a najpohodlnejšie.

V našom prípade použijeme Jenkins.


Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Úloha

Vytvorte pohodlnú úlohu Jenkins, ktorá spustí zostavenie a (alebo) nasadenie vybranej mikroslužby určitej verzie.

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Vstupné Data

Máme niekoľko úložísk obsahujúcich zdrojový kód rôznych mikroslužieb.

Definovanie parametrov

Nasledujúce parametre by mali byť prijaté ako vstup pre našu prácu:

  1. Adresa URL úložiska s kódom mikroslužby, ktorý chceme vytvoriť a nasadiť pri spustení úlohy.
  2. ID potvrdenia, z ktorého sa uskutoční zostavenie.

AKO JE

Najjednoduchší spôsob, ako splniť túto úlohu, je vytvoriť dva parametre typu String.

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

V tomto prípade bude musieť používateľ manuálne zadať cestu k úložisku a ID odovzdania, čo, ako vidíte, nie je úplne pohodlné.

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

AKO BYŤ

Teraz skúsme iný typ parametrov, aby sme zvážili všetky jeho výhody.
Vytvorme prvý parameter typu Choice Parameter, druhý - Active Choices Reactive Reference Parameter. V parametri s typom Choice manuálne doplníme do poľa Choices názvy úložísk, kde je uložený kód našich mikroslužieb.

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Ak sa publiku páči tento článok, tak v ďalšom článku popíšem proces konfigurácie úloh v Jenkins, pomocou popisu cez kód (Configuration as code), t.j. nebudeme musieť ručne zadávať názvy úložísk a vytvárať parametre, všetko prebehne automaticky (náš kód dostane zoznam úložísk od SCM a vytvorí parameter s týmto zoznamom).

Hodnoty druhého parametra sa vyplnia dynamicky v závislosti od toho, akú hodnotu nadobudne prvý parameter (test1 alebo test2), pretože každé úložisko má svoj vlastný zoznam potvrdení.

Aktívne voľby Reaktívny referenčný parameter má vyplniť nasledujúce polia:

  1. Meno – názov parametra.
  2. Skript – kód, ktorý sa vykoná pri každej zmene hodnoty parametra z poľa Referenčný parameter (v našom prípade, keď volíme medzi test1 a test2).
  3. Popis – stručný popis parametra.
  4. Typ výberu – typ objektu vrátený skriptom (v našom prípade vrátime html kód).
  5. Referenčný parameter – názov parametra, pri zmene hodnoty ktorého sa vykoná kód zo sekcie Script.

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Poďme priamo k vyplneniu najdôležitejšieho poľa v tomto parametri. Ponúkame na výber dva typy implementácie: použitie Groovy Script alebo Scripter Script.
Vyberáme prvý, pretože Scriptler je len doplnok, ktorý ukladá skripty, ktoré ste predtým napísali, a umožňuje vám ich použiť v iných úlohách bez opätovného kopírovania.

Groovy kód na získanie všetkých odovzdaní z vybraného úložiska:

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

Bez toho, aby sme zachádzali do podrobností, tento kód dostane ako vstup názov mikroslužby (MICROSERVICE_NAME) a ​​odošle požiadavku na bitbucket (metóda getCommitsForMicroservice) pomocou svojho API a získa id a správu odovzdania všetkých odovzdaní pre danú mikroslužbu.
Ako už bolo spomenuté, tento kód by mal vrátiť html, ktorý sa zobrazí na stránke Zostavte pomocou parametrov v Jenkins, takže všetky prijaté hodnoty z Bitbucket zabalíme do zoznamu a pridáme ich na výber.

Po dokončení všetkých krokov by sme mali získať takúto krásnu stránku Zostavte pomocou parametrov.

Ak ste vybrali mikroslužbu test1:

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Ak ste vybrali mikroslužbu test2:

Vytváranie dynamických parametrov v úlohe Jenkins alebo ako urobiť vašu úlohu užívateľsky príjemnou

Súhlaste s tým, že pre používateľa bude oveľa pohodlnejšie interagovať s vašou úlohou týmto spôsobom, ako zakaždým skopírovať adresu URL a hľadať požadované ID odovzdania.

PS Tento článok poskytuje veľmi zjednodušený príklad, ktorý nemusí byť v tejto podobe praktický, keďže zostavy majú oveľa viac rôznych parametrov, ale cieľom tohto článku bolo ukázať, ako nástroj funguje, nie poskytnúť funkčné riešenie.

PSS Ako som už napísal, ak je tento článok užitočný, nasledujúci bude o tom dynamická konfigurácia Jenkinsových úloh prostredníctvom kódu.

Zdroj: hab.com

Pridať komentár