Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Dobar dan, Habr!

Danas bih želio podijeliti jedan od načina korištenja Dodatak Active Choices obaviti zadatak u Jenkins najobjedinjeniji i najlakši za korištenje.

Uvod

Takva skraćenica kao što je DevOps više nije ništa novo za IT zajednicu. Za mnoge ljude fraza "do DevOps" povezana je s nekom vrstom čarobnog gumba, kada se klikne, kod aplikacije se automatski pretvara u implementiranu i testiranu aplikaciju (sve je zapravo kompliciranije, ali mi apstrahiramo od svih procesa).

Dakle, dobili smo narudžbu da napravimo takav čarobni gumb kako bi administratori mogli implementirati aplikaciju jednim klikom. Postoje različite vrste implementacije ovog zadatka: od pisanja bota za bilo koji od instant messengera do razvoja zasebne aplikacije. Ipak, sve to ima isti cilj - početak izgradnje i implementacije aplikacije učiniti što transparentnijim i praktičnijim.

U našem slučaju ćemo koristiti Jenkins.


Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Zadatak

Napravite zgodan Jenkinsov posao koji će pokrenuti izgradnju i (ili) implementaciju odabrane mikroservise određene verzije.

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Ulazni podaci

Imamo nekoliko repozitorija koji sadrže izvorni kod raznih mikroservisa.

Definiranje parametara

Sljedeći parametri trebaju biti primljeni kao input za naš posao:

  1. URL repozitorija s kodom mikroservisa koji želimo izgraditi i implementirati prilikom izvođenja posla.
  2. ID obveze iz koje će se dogoditi izgradnja.

KAO ŠTO JE

Najlakši način da izvršite ovaj zadatak je kreiranje dva parametra tipa String.

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

U ovom slučaju, korisnik će morati ručno unijeti stazu do repozitorija i ID predaje, što, vidite, nije sasvim zgodno.

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

KAO I BITI

Isprobajmo sada drugu vrstu parametara kako bismo razmotrili sve njene prednosti.
Kreirajmo prvi parametar s tipom Choice Parameter, drugi - Active Choices Reactive Reference Parameter. U parametru s vrstom Choice ručno ćemo u polje Choices dodati nazive repozitorija u kojima je pohranjen kod naših mikroservisa.

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Ako se publici sviđa ovaj članak, onda ću u sljedećem članku opisati proces konfiguriranja zadataka u Jenkinsu, koristeći opis kroz kod (Configuration as code), tj. nećemo morati ručno unositi nazive repozitorija i kreirati parametre, sve će se dogoditi automatski (naš kod će primiti popis repozitorija od SCM-a i kreirati parametar s tim popisom).

Vrijednosti drugog parametra popunjavat će se dinamički, ovisno o tome koju vrijednost ima prvi parametar (test1 ili test2), jer svako spremište ima svoju listu obveza.

Aktivni izbori Reaktivni referentni parametar ima sljedeća polja za popunjavanje:

  1. Ime i Prezime – naziv parametra.
  2. Script – kod koji će se izvršavati svaki put kada se promijeni vrijednost parametra iz polja Referentni parametar (u našem slučaju kada biramo između test1 i test2).
  3. Opis – kratak opis parametra.
  4. Vrsta izbora – tip objekta koji vraća skripta (u našem slučaju vratit ćemo html kod).
  5. Referentni parametar – naziv parametra, kod čije se vrijednosti promijeni izvršava se kod iz odjeljka Skripta.

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Prijeđimo izravno na ispunjavanje najvažnijeg polja u ovom parametru. Na izbor su nam ponuđene dvije vrste implementacije: korištenje Groovy skripta ili Scriptler skripta.
Odabrali smo prvo, budući da je Scriptler samo dodatak koji sprema skripte koje ste prethodno napisali i omogućuje vam da ih koristite u drugim zadacima bez ponovnog kopiranja.

Groovy kod za dobivanje svih obveza iz odabranog 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 ulazeći u detalje, ovaj kod prima naziv mikroservisa (MICROSERVICE_NAME) kao ulaz i šalje zahtjev na Bitbucket (metoda getCommitsForMicroservice) pomoću svog API-ja i dobiva ID i poruku o predaji svih obveza za određenu mikrouslugu.
Kao što je ranije spomenuto, ovaj kod bi trebao vratiti html koji će biti prikazan na stranici Izrada s parametrima u Jenkinsu, tako da sve dobivene vrijednosti iz Bitbucketa zamotamo u popis i dodamo ih za odabir.

Nakon što smo dovršili sve korake, trebali bismo dobiti tako lijepu stranicu Izrada s parametrima.

Ako ste odabrali mikroservis test1:

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Ako ste odabrali mikroservis test2:

Stvaranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti jednostavnim za korištenje

Složite se da će korisniku biti mnogo prikladnije komunicirati s vašim zadatkom na ovaj način nego svaki put kopirati url i tražiti traženi ID predaje.

PS Ovaj članak daje vrlo pojednostavljen primjer, koji možda neće biti od praktične koristi u ovom obliku, budući da sklopovi imaju puno više različitih parametara, ali svrha ovog članka je bila pokazati kako alat radi, a ne dati radno rješenje.

PSS Kao što sam ranije napisao, ako je ovaj članak koristan, sljedeći će biti o tome dinamička konfiguracija Jenkinsovih zadataka putem koda.

Izvor: www.habr.com

Dodajte komentar