Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

Dobar dan, Habr!

Danas bih želio podijeliti jedan od načina korištenja Dodatak Active Choices uradi zadatak u Jenkins najjedinstveniji i najprikladniji za upotrebu.

Uvod

Takva skraćenica kao što je DevOps više nije nešto novo za IT zajednicu. Za mnoge ljude, fraza “do DevOps” asocira na neku vrstu čarobnog dugmeta, kada se klikne, kod aplikacije se automatski pretvara u implementiranu i testiranu aplikaciju (sve je zapravo složenije, ali apstrahujemo od svih procesa).

Dakle, dobili smo narudžbu da napravimo takvo čarobno dugme kako bi administratori mogli da implementiraju aplikaciju jednim klikom. Postoje različite vrste implementacije ovog zadatka: od pisanja bota za bilo koji od instant messenger-a do razvoja zasebne aplikacije. Ipak, sve ovo ima isti cilj – da početak izrade i implementacije aplikacije učini što transparentnijim i praktičnijim.

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


Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

Cilj

Kreirajte zgodan Jenkinsov posao koji će pokrenuti izgradnju i (ili) implementaciju odabranog mikroservisa određene verzije.

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

Ulazni podaci

Imamo nekoliko spremišta koja sadrže izvorni kod raznih mikroservisa.

Definiranje parametara

Sljedeće parametre treba primiti kao ulaz za naš posao:

  1. URL spremišta sa mikroservisnim kodom koji želimo da izgradimo i primenimo prilikom pokretanja posla.
  2. ID urezivanja iz kojeg će se graditi.

KAO ŠTO JE

Najlakši način za postizanje ovog zadatka je kreiranje dva parametra tipa String.

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

U ovom slučaju, korisnik će morati ručno da unese putanju do spremišta i ID urezivanja, što, vidite, nije baš zgodno.

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

KAO I BITI

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

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

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 imena spremišta i kreirati parametre, sve će se dogoditi automatski (naš kod će dobiti listu spremišta od SCM-a i kreirati parametar sa ovom listom).

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

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

  1. Ime – 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 ćemo vratiti html kod).
  5. Referentni parametar – naziv parametra, kada se promijeni vrijednost, izvršit će se kod iz odjeljka Skripta.

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

Pređimo direktno na popunjavanje najvažnijeg polja u ovom parametru. Nudimo nam dvije vrste implementacije na izbor: korištenje Groovy Script ili Scriptler Script.
Mi biramo prvi, budući da je Scriptler samo dodatak koji sprema skripte koje ste prethodno napisali i omogućava vam da ih koristite u drugim zadacima bez ponovnog kopiranja.

Groovy kod za preuzimanje svih urezivanja iz odabranog spremišta:

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 ime mikroservisa (MICROSERVICE_NAME) kao ulaz i šalje zahtjev na Bitbucket (metod getCommitsForMicroservice) koristeći svoj API, i dobija ID i poruku urezivanja svih urezivanja za dati mikroservis.
Kao što je ranije spomenuto, ovaj kod bi trebao vratiti html koji će biti prikazan na stranici Izgradite s parametrima u Jenkinsu, tako da sve primljene vrijednosti iz Bitbucket-a umotavamo u listu i dodajemo ih za odabir.

Nakon što završimo sve korake, trebali bismo dobiti tako lijepu stranicu Izgradite s parametrima.

Ako ste odabrali test1 mikroservis:

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

Ako ste odabrali test2 mikroservis:

Kreiranje dinamičkih parametara u Jenkinsovom poslu ili kako svoj zadatak učiniti lakšim za korisnika

Slažete se da će korisniku biti mnogo zgodnije da komunicira sa vašim zadatkom na ovaj način nego da svaki put kopira url i traži traženi ID urezivanja.

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 mnogo više različitih parametara, ali svrha ovog članka je bila da pokaže kako alat radi, a ne da pruži radno rješenje.

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

izvor: www.habr.com

Dodajte komentar