Egun ona, Habr!
Gaur erabiltzeko moduetako bat partekatu nahiko nuke
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.
Task
Sortu Jenkins lan eroso bat, bertsio jakin baten hautatutako mikrozerbitzuaren eraikuntza eta (edo) hedapena abiaraziko duena.
Sarrerako datuak
Hainbat mikrozerbitzuren iturburu-kodea duten biltegi batzuk ditugu.
Parametroak zehaztea
Parametro hauek jaso behar dira gure lanerako sarrera gisa:
- Lana exekutatzean eraiki eta zabaldu nahi dugun mikrozerbitzu kodea duen biltegiaren URLa.
- Eraikuntza gertatuko den konpromisoaren IDa.
DAGOEN BEZALA
Zeregin hau burutzeko modurik errazena String motako bi parametro sortzea da.
Kasu honetan, erabiltzaileak eskuz sartu beharko ditu biltegirako bidea eta konpromezuaren IDa, eta hori, ikusten duzu, ez da guztiz erosoa.
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.
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:
- izena β parametroaren izena.
- Script β Erreferentziazko parametroaren eremuko parametroaren balioa aldatzen den bakoitzean exekutatuko den kodea (gure kasuan, test1 eta test2 artean aukeratzen dugunean).
- Deskribapena β parametroaren deskribapen laburra.
- Aukera mota β scriptak itzultzen duen objektu mota (gure kasuan html kodea itzuliko dugu).
- Erreferentziazko parametroa β parametroaren izena, zeinaren balioa aldatzen denean, Script ataleko kodea exekutatuko da.
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:
Test2 mikrozerbitzua hautatu baduzu:
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