Hyvää päivää, Habr!
Tänään haluan jakaa yhden käyttötavoista
Esittely
Sellainen lyhenne kuin DevOps ei ole enää mikään uusi IT-yhteisölle. Monille ihmisille ilmaus "do DevOps" liittyy jonkinlaiseen taikapainikkeeseen, kun sitä napsautetaan, sovelluskoodi muuttuu automaattisesti käyttöönotetuksi ja testatuksi sovellukseksi (kaikki on itse asiassa monimutkaisempaa, mutta vedämme pois kaikista prosesseista).
Joten saimme tilauksen tehdä tällainen taikapainike, jotta järjestelmänvalvojat voisivat ottaa sovelluksen käyttöön yhdellä napsautuksella. Tämän tehtävän toteuttamistapoja on useita: botin kirjoittamisesta mille tahansa pikaviestintälle erillisen sovelluksen kehittämiseen. Kaikella tällä on kuitenkin sama tavoite - tehdä sovelluksen rakentamisen ja käyttöönoton aloittamisesta mahdollisimman läpinäkyvää ja kätevää.
Meidän tapauksessamme käytämme Jenkins.
Tehtävä
Luo kätevä Jenkins-työ, joka käynnistää tietyn version valitun mikropalvelun rakentamisen ja (tai) käyttöönoton.
Syötä tiedot
Meillä on useita arkistoja, jotka sisältävät erilaisten mikropalvelujen lähdekoodia.
Parametrien määrittely
Seuraavat parametrit tulisi saada syötteenä työhömme:
- Sen mikropalvelukoodin sisältävän arkiston URL-osoite, jonka haluamme rakentaa ja ottaa käyttöön työn suorittamisen aikana.
- Sen sitoumuksen tunnus, josta rakennus tehdään.
KUTEN ON
Helpoin tapa suorittaa tämä tehtävä on luoda kaksi String-tyyppistä parametria.
Tässä tapauksessa käyttäjän on syötettävä manuaalisesti polku arkistoon ja toimitustunnus, mikä ei ole täysin kätevää.
KUIN OLLAAN
Kokeillaan nyt toisen tyyppisiä parametreja tarkastellaksemme kaikkia sen etuja.
Luodaan ensimmäinen parametri tyypiltään Choice Parameter, toinen - Active Choices Reactive Reference Parameter. Vaihtoehto-tyypin parametriin lisäämme manuaalisesti Choices-kenttään niiden arkiston nimet, joihin mikropalveluidemme koodi on tallennettu.
Jos yleisö pitää tästä artikkelista, niin seuraavassa artikkelissa kuvailen tehtävien konfigurointiprosessia Jenkinsissä käyttämällä kuvausta koodin kautta (Configuration as code), ts. meidän ei tarvitse syöttää arkiston nimiä ja luoda parametreja manuaalisesti, kaikki tapahtuu automaattisesti (koodimme saa luettelon arkistoista SCM:ltä ja luo parametrin tällä luettelolla).
Toisen parametrin arvot täytetään dynaamisesti sen mukaan, minkä arvon ensimmäinen parametri ottaa (test1 tai testi2), koska jokaisella arkistolla on oma toimitusluettelonsa.
Active Choices Reaktiivinen viiteparametri on täytettävä seuraavat kentät:
- Nimi – parametrin nimi.
- Käsikirjoitus – koodi, joka suoritetaan aina, kun parametrin arvoa Viittausparametri-kentästä muutetaan (tässä tapauksessa, kun valitsemme testi1:n ja testi2:n välillä).
- Kuvaus – parametrin lyhyt kuvaus.
- Valintatyyppi – komentosarjan palauttaman objektin tyyppi (tässä tapauksessa palaamme html-koodin).
- Viitattu parametri – parametrin nimi, jonka arvoa muuttaessa suoritetaan Script-osion koodi.
Jatketaan suoraan tämän parametrin tärkeimmän kentän täyttämiseen. Valittavana on kaksi toteutustyyppiä: käyttämällä Groovy-käsikirjoitus tai Scriptler Script.
Valitsemme ensimmäisen, koska Scriptler on vain laajennus, joka tallentaa aiemmin kirjoittamasi skriptit ja antaa sinun käyttää niitä muissa tehtävissä ilman kopiointia uudelleen.
Groovy-koodi saadaksesi kaikki toimitukset valitusta arkistosta:
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()
Menemättä yksityiskohtiin tämä koodi vastaanottaa mikropalvelun nimen (MICROSERVICE_NAME) syötteenä ja lähettää pyynnön Bitbucket (menetelmä getCommitsForMicroservice).
Kuten aiemmin mainittiin, tämän koodin pitäisi palauttaa sivulla näkyvä html Rakenna parametreilla Jenkinsissä, joten käärimme kaikki Bitbucketista vastaanotetut arvot luetteloon ja lisäämme ne valitaksesi.
Kun kaikki vaiheet on suoritettu, meidän pitäisi saada niin kaunis sivu Rakenna parametreilla.
Jos valitsit test1-mikropalvelun:
Jos valitsit test2-mikropalvelun:
Hyväksy, että käyttäjän on paljon helpompaa olla vuorovaikutuksessa tehtäväsi kanssa tällä tavalla kuin kopioida url joka kerta ja etsiä vaadittua sitoutumistunnusta.
PS. Tämä artikkeli tarjoaa hyvin yksinkertaistetun esimerkin, josta ei välttämättä ole tässä muodossa käytännön hyötyä, koska kokoonpanoissa on paljon enemmän erilaisia parametreja, mutta tämän artikkelin tarkoituksena oli näyttää kuinka työkalu toimii, ei tarjota toimivaa ratkaisua.
PSS Kuten aiemmin kirjoitin, jos tämä artikkeli on hyödyllinen, seuraava on noin Jenkins-tehtävien dynaaminen konfigurointi koodin avulla.
Lähde: will.com