Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Egun ona, Habr!

Gaur erabiltzeko moduetako bat partekatu nahiko nuke Active Choices plugina egin zeregina Jenkins bateratuena eta erabilgarriena.

Sarrera

DevOps bezalako laburdura bat jada ez da zerbait berria IT komunitatearentzat. Jende askorentzat, "egin DevOps" esaldia botoi magiko batekin lotzen da, sakatzean, aplikazioaren kodea automatikoki zabaldutako eta probatutako aplikazio batean bihurtzen da (dena da benetan konplikatuagoa, baina prozesu guztietatik abstraitzen ari gara).

Beraz, halako botoi magiko bat egiteko agindua jaso genuen administratzaileek aplikazioa klik batekin zabaldu ahal izateko. Zeregin honen inplementazio mota desberdinak daude: berehalako edozein mezularirentzat bot bat idaztetik aplikazio bereizi bat garatzera arte. Hala ere, honek guztiak helburu bera du: aplikazioaren eraikuntza eta hedapena abiaraztea ahalik eta garden eta erosoena izatea.

Gure kasuan erabiliko dugu Jenkins.


Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Task

Sortu Jenkins lan eroso bat, bertsio jakin baten hautatutako mikrozerbitzuaren eraikuntza eta (edo) hedapena abiaraziko duena.

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Sarrerako datuak

Hainbat mikrozerbitzuren iturburu-kodea duten biltegi batzuk ditugu.

Parametroak zehaztea

Parametro hauek jaso behar dira gure lanerako sarrera gisa:

  1. Lana exekutatzean eraiki eta zabaldu nahi dugun mikrozerbitzu kodea duen biltegiaren URLa.
  2. Eraikuntza gertatuko den konpromisoaren IDa.

DAGOEN BEZALA

Zeregin hau burutzeko modurik errazena String motako bi parametro sortzea da.

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Kasu honetan, erabiltzaileak eskuz sartu beharko ditu biltegirako bidea eta konpromezuaren IDa, eta hori, ikusten duzu, ez da guztiz erosoa.

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

IZATEKO

Orain proba ditzagun beste parametro mota bat bere abantaila guztiak kontuan hartzeko.
Sortu dezagun lehen parametroa Choice Parameter motarekin, bigarrena - Active Choices Reactive Reference Parameter. Aukera mota duen parametroan, Eskuz gehituko ditugu Aukerak eremuan gure mikrozerbitzuen kodea gordetzen duten biltegien izenak.

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Ikusleari artikulu hau gustatzen bazaio, hurrengo artikuluan Jenkinsen atazak konfiguratzeko prozesua deskribatuko dut, kode bidezko deskribapen bat erabiliz (Konfigurazioa kode gisa), hau da. ez dugu biltegiaren izenak eskuz sartu eta parametroak sortu beharko, dena automatikoki gertatuko da (gure kodeak SCMren biltegien zerrenda jasoko du eta zerrenda honekin parametro bat sortuko du).

Bigarren parametroaren balioak dinamikoki beteko dira, lehenengo parametroak zein balio hartzen duen (test1 edo test2) arabera, biltegi bakoitzak bere konpromisoen zerrenda duelako.

Aukera aktiboak Erreferentzia-parametro erreaktiboa eremu hauek bete behar ditu:

  1. izena – parametroaren izena.
  2. Script – Erreferentziazko parametroaren eremuko parametroaren balioa aldatzen den bakoitzean exekutatuko den kodea (gure kasuan, test1 eta test2 artean aukeratzen dugunean).
  3. Deskribapena – parametroaren deskribapen laburra.
  4. Aukera mota – scriptak itzultzen duen objektu mota (gure kasuan html kodea itzuliko dugu).
  5. Erreferentziazko parametroa – parametroaren izena, zeinaren balioa aldatzen denean, Script ataleko kodea exekutatuko da.

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Goazen zuzenean parametro honetako eremurik garrantzitsuena betetzera. Bi inplementazio mota eskaintzen zaizkigu aukeran: erabiltzea Groovy gidoia edo Scriptler Script.
Lehenengoa aukeratzen dugu, Scriptler aurrez idatzitako script-ak gordetzen dituen plugin bat besterik ez baita eta beste zeregin batzuetan erabiltzeko aukera ematen dizu berriro kopiatu-itsatsi gabe.

Kode groovy hautatutako biltegitik konpromiso guztiak lortzeko:

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

Xehetasunetan sartu gabe, kode honek mikrozerbitzuaren izena (MICROSERVICE_NAME) jasotzen du sarrera gisa eta eskaera bat bidaltzen du helbidera. bitbucket (metodoa getCommitsForMicroservice) bere APIa erabiliz, eta mikrozerbitzu jakin baterako konpromiso guztien id eta konpromiso-mezua lortzen ditu.
Lehen esan bezala, kode honek orrialdean bistaratuko den html itzuli beharko luke Parametroekin eraiki Jenkins-en, beraz, Bitbucket-etik jasotako balio guztiak zerrenda batean biltzen ditugu eta hautatzeko gehitzen ditugu.

Urrats guztiak bete ondoren, hain orri eder bat lortu beharko genuke Parametroekin eraiki.

Test1 mikrozerbitzua hautatu baduzu:

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Test2 mikrozerbitzua hautatu baduzu:

Jenkins-eko lan batean parametro dinamikoak sortzea edo zure zeregina erabiltzeko modua nola egin

Onartu erabiltzailearentzat askoz erosoagoa izango dela zure zereginarekin modu honetan elkarrekintzan aritzea url bakoitzean kopiatzea eta beharrezko konpromezu IDa bilatzea baino.

PS Artikulu honek oso adibide sinplifikatu bat eskaintzen du, eta baliteke inprimaki honetan erabilera praktikoa ez izatea, muntaiak parametro ezberdin gehiago baitituzte, baina artikulu honen helburua tresnak nola funtzionatzen duen erakustea zen, ez laneko irtenbide bat ematea.

PSS Lehen idatzi dudan bezala, artikulu hau erabilgarria bada, hurrengoa buruz izango da Jenkins zereginen konfigurazio dinamikoa kodearen bidez.

Iturria: www.habr.com

Gehitu iruzkin berria