Dobrý deň, Habr!
Dnes by som sa rád podelil o jeden zo spôsobov použitia
Úvod
Takáto skratka ako DevOps už nie je pre IT komunitu novinkou. Slovné spojenie „do DevOps“ sa mnohým ľuďom spája s akýmsi magickým tlačidlom, po kliknutí sa kód aplikácie automaticky zmení na nasadenú a otestovanú aplikáciu (v skutočnosti je všetko komplikovanejšie, ale abstrahujeme od všetkých procesov).
Dostali sme teda príkaz vyrobiť také magické tlačidlo, aby administrátori mohli aplikáciu nasadiť jedným kliknutím. Existujú rôzne typy implementácie tejto úlohy: od napísania bota pre ktoréhokoľvek z instant messengerov až po vývoj samostatnej aplikácie. Napriek tomu má toto všetko rovnaký cieľ – urobiť spustenie zostavovania a nasadzovania aplikácie čo najtransparentnejšie a najpohodlnejšie.
V našom prípade použijeme Jenkins.
Úloha
Vytvorte pohodlnú úlohu Jenkins, ktorá spustí zostavenie a (alebo) nasadenie vybranej mikroslužby určitej verzie.
Vstupné Data
Máme niekoľko úložísk obsahujúcich zdrojový kód rôznych mikroslužieb.
Definovanie parametrov
Nasledujúce parametre by mali byť prijaté ako vstup pre našu prácu:
- Adresa URL úložiska s kódom mikroslužby, ktorý chceme vytvoriť a nasadiť pri spustení úlohy.
- ID potvrdenia, z ktorého sa uskutoční zostavenie.
AKO JE
Najjednoduchší spôsob, ako splniť túto úlohu, je vytvoriť dva parametre typu String.
V tomto prípade bude musieť používateľ manuálne zadať cestu k úložisku a ID odovzdania, čo, ako vidíte, nie je úplne pohodlné.
AKO BYŤ
Teraz skúsme iný typ parametrov, aby sme zvážili všetky jeho výhody.
Vytvorme prvý parameter typu Choice Parameter, druhý - Active Choices Reactive Reference Parameter. V parametri s typom Choice manuálne doplníme do poľa Choices názvy úložísk, kde je uložený kód našich mikroslužieb.
Ak sa publiku páči tento článok, tak v ďalšom článku popíšem proces konfigurácie úloh v Jenkins, pomocou popisu cez kód (Configuration as code), t.j. nebudeme musieť ručne zadávať názvy úložísk a vytvárať parametre, všetko prebehne automaticky (náš kód dostane zoznam úložísk od SCM a vytvorí parameter s týmto zoznamom).
Hodnoty druhého parametra sa vyplnia dynamicky v závislosti od toho, akú hodnotu nadobudne prvý parameter (test1 alebo test2), pretože každé úložisko má svoj vlastný zoznam potvrdení.
Aktívne voľby Reaktívny referenčný parameter má vyplniť nasledujúce polia:
- Meno – názov parametra.
- Skript – kód, ktorý sa vykoná pri každej zmene hodnoty parametra z poľa Referenčný parameter (v našom prípade, keď volíme medzi test1 a test2).
- Popis – stručný popis parametra.
- Typ výberu – typ objektu vrátený skriptom (v našom prípade vrátime html kód).
- Referenčný parameter – názov parametra, pri zmene hodnoty ktorého sa vykoná kód zo sekcie Script.
Poďme priamo k vyplneniu najdôležitejšieho poľa v tomto parametri. Ponúkame na výber dva typy implementácie: použitie Groovy Script alebo Scripter Script.
Vyberáme prvý, pretože Scriptler je len doplnok, ktorý ukladá skripty, ktoré ste predtým napísali, a umožňuje vám ich použiť v iných úlohách bez opätovného kopírovania.
Groovy kód na získanie všetkých odovzdaní z vybraného úložiska:
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()
Bez toho, aby sme zachádzali do podrobností, tento kód dostane ako vstup názov mikroslužby (MICROSERVICE_NAME) a odošle požiadavku na bitbucket (metóda getCommitsForMicroservice) pomocou svojho API a získa id a správu odovzdania všetkých odovzdaní pre danú mikroslužbu.
Ako už bolo spomenuté, tento kód by mal vrátiť html, ktorý sa zobrazí na stránke Zostavte pomocou parametrov v Jenkins, takže všetky prijaté hodnoty z Bitbucket zabalíme do zoznamu a pridáme ich na výber.
Po dokončení všetkých krokov by sme mali získať takúto krásnu stránku Zostavte pomocou parametrov.
Ak ste vybrali mikroslužbu test1:
Ak ste vybrali mikroslužbu test2:
Súhlaste s tým, že pre používateľa bude oveľa pohodlnejšie interagovať s vašou úlohou týmto spôsobom, ako zakaždým skopírovať adresu URL a hľadať požadované ID odovzdania.
PS Tento článok poskytuje veľmi zjednodušený príklad, ktorý nemusí byť v tejto podobe praktický, keďže zostavy majú oveľa viac rôznych parametrov, ale cieľom tohto článku bolo ukázať, ako nástroj funguje, nie poskytnúť funkčné riešenie.
PSS Ako som už napísal, ak je tento článok užitočný, nasledujúci bude o tom dynamická konfigurácia Jenkinsových úloh prostredníctvom kódu.
Zdroj: hab.com