Jó nap, Habr!
Ma az egyik felhasználási módot szeretném megosztani
Bevezetés
A DevOps rövidítés már nem újdonság az informatikai közösség számára. Sokak számára a „do DevOps” kifejezés valamilyen varázsgombhoz asszociál, rákattintásra az alkalmazás kódja automatikusan egy telepített és tesztelt alkalmazássá változik (igazából minden bonyolultabb, de elvonatkoztatunk minden folyamattól).
Így megrendelést kaptunk egy ilyen varázsgomb elkészítésére, hogy a rendszergazdák egy kattintással telepíthessék az alkalmazást. Ennek a feladatnak különféle megvalósítási módjai vannak: a bot írásától az azonnali üzenetküldőkhöz egy külön alkalmazás fejlesztéséig. Mindazonáltal mindennek ugyanaz a célja - hogy az alkalmazás felépítésének és telepítésének megkezdése a lehető legátláthatóbb és kényelmesebb legyen.
A mi esetünkben használni fogjuk Jenkins.
Feladat
Hozzon létre egy kényelmes Jenkins-feladatot, amely elindítja egy bizonyos verzió kiválasztott mikroszolgáltatásának felépítését és (vagy) telepítését.
Beviteli adat
Számos adattárral rendelkezünk, amelyek különféle mikroszolgáltatások forráskódját tartalmazzák.
Paraméterek meghatározása
Munkánk bemeneteként a következő paramétereket kell megkapni:
- Annak a mikroszolgáltatási kóddal rendelkező tárhelynek az URL-címe, amelyet fel akarunk építeni és telepíteni szeretnénk a feladat futtatásakor.
- Annak a véglegesítésnek az azonosítója, amelyből a build megtörténik.
AMINT AZ
Ennek a feladatnak a legegyszerűbb módja két String típusú paraméter létrehozása.
Ebben az esetben a felhasználónak kézzel kell megadnia a tárhely elérési útját és a véglegesítési azonosítót, ami, látod, nem teljesen kényelmes.
A HOGY LEGYEN
Most próbáljunk ki egy másik típusú paramétert, hogy megvizsgáljuk minden előnyét.
Hozzuk létre az első paramétert Choice Parameter típussal, a másodikat - Active Choices Reactive Reference Parameter. A Choice típusú paraméterben a Choices mezőbe manuálisan hozzáadjuk azoknak a tárolóknak a nevét, ahol mikroszolgáltatásaink kódja van tárolva.
Ha a közönségnek tetszik ez a cikk, akkor a következő cikkben leírom a Jenkins-ben a feladatok konfigurálásának folyamatát, kódon keresztüli leírás segítségével (Configuration as code), pl. nem kell manuálisan megadnunk a lerakatneveket és létrehoznunk a paramétereket, minden automatikusan megtörténik (a kódunk megkapja a tárolók listáját az SCM-től, és ezzel a listával létrehoz egy paramétert).
A második paraméter értékei dinamikusan töltődnek ki, attól függően, hogy az első paraméter milyen értéket vesz fel (test1 vagy teszt2), mivel minden adattárnak megvan a saját véglegesítési listája.
Active Choices Reaktív referenciaparaméter a következő mezőket kell kitölteni:
- Név – paraméter neve.
- Forgatókönyv – kód, amely minden alkalommal lefut, amikor a Hivatkozott paraméter mezőben szereplő paraméter értéke megváltozik (esetünkben, amikor a teszt1 és a teszt2 között választunk).
- Leírás – a paraméter rövid leírása.
- Választás típusa – a szkript által visszaadott objektum típusa (esetünkben html kódot adunk vissza).
- Hivatkozott paraméter – annak a paraméternek a neve, amelynek értékének megváltoztatásakor a Script szekció kódja kerül végrehajtásra.
Folytassa közvetlenül a paraméter legfontosabb mezőjének kitöltésével. Kétféle megvalósítási mód közül választhatunk: a felhasználás Groovy forgatókönyv vagy Scriptler Script.
Az elsőt választjuk, mivel a Scriptler csak egy beépülő modul, amely elmenti a korábban megírt szkripteket, és lehetővé teszi, hogy más feladatokban is felhasználhassa őket, anélkül, hogy ismételten másolást kellene beilleszteni.
Groovy kód az összes véglegesítés lekéréséhez a kiválasztott tárolóból:
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()
Anélkül, hogy belemennénk a részletekbe, ez a kód bemenetként megkapja a mikroszolgáltatás nevét (MICROSERVICE_NAME), és kérést küld Bitbucket (módszer getCommitsForMicroservice).
Amint korábban említettük, ennek a kódnak az oldalon megjelenő html-t kell visszaadnia Építsd paraméterekkel Jenkinsben, ezért a Bitbuckettől kapott összes értéket listába foglaljuk, és hozzáadjuk őket a kiválasztáshoz.
Az összes lépés elvégzése után egy ilyen szép oldalt kell kapnunk Építsd paraméterekkel.
Ha a teszt1 mikroszolgáltatást választotta:
Ha a teszt2 mikroszolgáltatást választotta:
Fogadd el, hogy a felhasználó számára sokkal kényelmesebb lesz így kommunikálni a feladatoddal, mint minden alkalommal átmásolni az url-t, és megkeresni a szükséges véglegesítési azonosítót.
PS Ez a cikk egy nagyon leegyszerűsített példát mutat be, aminek ebben a formában nem biztos, hogy a gyakorlati haszna van, mivel az összeállításoknak sokkal több különböző paramétere van, de ennek a cikknek az volt a célja, hogy bemutassa az eszköz működését, nem pedig a működő megoldást.
PSS Ahogy korábban írtam, ha hasznos lesz ez a cikk, akkor a következő kb Jenkins feladatok dinamikus konfigurálása kódon keresztül.
Forrás: will.com