Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Dobrý den, Habr!

Dnes bych se rád podělil o jeden ze způsobů použití Plugin Active Choices udělat úkol v Jenkins co nejjednotnější a nejsrozumitelnější pro uživatele.

úvod

Taková zkratka jako DevOps už dávno není pro IT komunitu novinkou. Pro mnoho lidí je fráze „make DevOps“ spojena s jakýmsi magickým tlačítkem, po kliknutí se kód aplikace automaticky promění v nasazenou a otestovanou aplikaci (ve skutečnosti je to složitější, ale abstrahujeme od všech procesů).

Dostali jsme tedy příkaz vyrobit takové kouzelné tlačítko, aby administrátoři mohli aplikaci nasadit jedním kliknutím. Existují různé typy implementace tohoto úkolu: počínaje napsáním bota pro kteréhokoli z messengerů a konče vývojem samostatné aplikace. Nicméně cíl toho všeho je stejný – maximálně zprůhlednit a zpohodlnit spuštění montáže a nasazení aplikace.

V našem případě použijeme Jenkins.


Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Úkol

Vytvořte pohodlnou úlohu Jenkins, která spustí sestavení a (nebo) nasazení vybrané mikroslužby určité verze.

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Vstupní data

Máme několik úložišť, která obsahují zdrojový kód různých mikroslužeb.

Definování parametrů

Vstup naší úlohy by měl obdržet následující parametry:

  1. Adresa URL úložiště s kódem mikroslužby, který chceme sestavit a nasadit při spuštění úlohy.
  2. ID potvrzení, ze kterého se má sestavit.

JAK JE

Nejjednodušší způsob, jak tento úkol splnit, je vytvořit dva parametry typu String.

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

V tomto případě bude uživatel muset ručně zadat cestu k úložišti a id odevzdání, což, jak vidíte, není příliš pohodlné.

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

JAK BÝT

Nyní zkusme jiný typ parametrů, abychom viděli všechny jeho výhody.
Vytvořme první parametr typu Choice Parameter, druhý - Active Choices Reactive Reference Parameter. V parametru s typem Choice ručně doplníme názvy úložišť do pole Choices, kde je uložen kód našich mikroslužeb.

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Pokud se publiku tento článek líbí, tak v dalším článku popíšu proces konfigurace úloh v Jenkins pomocí popisu přes kód (Configuration as code), tzn. nebudeme muset ručně zadávat názvy repozitářů a vytvářet parametry, vše proběhne automaticky (náš kód získá seznam repozitářů z SCM a vytvoří parametr s tímto seznamem).

Hodnoty druhého parametru se budou vyplňovat dynamicky v závislosti na tom, jakou hodnotu nabývá první parametr (test1 nebo test2), protože každé úložiště má svůj vlastní seznam odevzdání.

Aktivní volby Reaktivní referenční parametr má k vyplnění následující pole:

  1. Příjmení – název parametru.
  2. Scénář - kód, který se provede při každé změně hodnoty parametru z pole Referenční parametr (v našem případě, když volíme mezi test1 a test2).
  3. Popis – krátký popis parametru.
  4. Typ výběru - typ objektu vráceného skriptem (v našem případě vrátíme html kód).
  5. odkazovaný parametr – název parametru, při změně jeho hodnoty se provede kód ze sekce Script.

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Pokračujme přímo k vyplnění nejdůležitějšího pole v tomto parametru. Nabízíme dva typy implementace na výběr: použití Groovy skript nebo Scriptler Script.
Vybíráme první, protože Scriptler je pouze plugin, který ukládá skripty, které jste již napsali, a umožňuje vám je použít v jiných úlohách bez opětovného kopírování.

Groovy kód pro získání všech commitů z vybraného úložiště:

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

Aniž bychom zacházeli do podrobností, tento kód obdrží jako vstup název mikroslužby (MICROSERVICE_NAME) a ​​odešle požadavek na Bitbucket (metoda getCommitsForMicroservice) pomocí svého API a získá id a zprávu o odevzdání všech odevzdání pro danou mikroslužbu.
Jak již bylo zmíněno dříve, tento kód by měl vrátit html, který se zobrazí na stránce Sestavení s parametry v Jenkins, takže všechny přijaté hodnoty z Bitbucket zabalíme do seznamu a přidáme je do výběru.

Po dokončení všech kroků bychom měli získat tak krásnou stránku Sestavení s parametry.

Pokud jste zvolili mikroslužbu test1:

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Pokud jste zvolili mikroslužbu test2:

Vytváření dynamických parametrů v Jenkinsově zakázce aneb jak udělat vaši úlohu uživatelsky přívětivou

Souhlaste s tím, že pro uživatele bude mnohem pohodlnější interagovat s vaším úkolem tímto způsobem, než pokaždé kopírovat url a hledat požadované id commitu.

PS Tento článek je velmi zjednodušeným příkladem, který nemusí mít praktické využití tak, jak je, protože sestavy mají mnohem více různých možností, ale účelem tohoto článku bylo ukázat, jak nástroj funguje, nikoli poskytnout funkční řešení.

PSS Jak jsem již psal dříve, pokud je tento článek užitečný, bude o něm následující dynamická konfigurace Jenkinsových úloh pomocí kódu.

Zdroj: www.habr.com

Přidat komentář