Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Laba diena, Habr!

Šodien vēlos padalīties ar vienu no izmantošanas veidiem Active Choices spraudnis izpildi uzdevumu Jenkins visvienotākā un lietotājam draudzīgākā.

Ievads

Šāds saīsinājums kā DevOps IT kopienai vairs nav nekas jauns. Frāze “do DevOps” daudziem asociējas ar kaut kādu burvju pogu, uzklikšķinot, aplikācijas kods automātiski pārvēršas par izvietotu un pārbaudītu aplikāciju (viss patiesībā ir sarežģītāk, bet mēs abstrahējamies no visiem procesiem).

Tātad, mēs saņēmām pasūtījumu izveidot šādu burvju pogu, lai administratori varētu izvietot lietojumprogrammu ar vienu klikšķi. Ir dažādi šī uzdevuma īstenošanas veidi: no robotprogrammatūras rakstīšanas jebkuram tūlītējās ziņojumapmaiņas programmai līdz atsevišķas lietojumprogrammas izstrādei. Tomēr tam visam ir viens un tas pats mērķis - padarīt lietojumprogrammas izveides un izvietošanas sākšanu pēc iespējas pārskatāmāku un ērtāku.

Mūsu gadījumā mēs izmantosim Jenkins.


Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Uzdevums

Izveidojiet ērtu Jenkins darbu, kas sāks noteiktas versijas atlasītā mikropakalpojuma veidošanu un (vai) izvietošanu.

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Ievadiet datus

Mums ir vairākas krātuves, kurās ir dažādu mikropakalpojumu pirmkods.

Parametru noteikšana

Mūsu darbā ir jāsaņem šādi parametri:

  1. Repozitorija URL ar mikropakalpojuma kodu, kuru mēs vēlamies izveidot un izvietot, izpildot darbu.
  2. Saistības ID, no kuras tiks veikta būvēšana.

KĀ IR

Vienkāršākais veids, kā veikt šo uzdevumu, ir izveidot divus String tipa parametrus.

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Šajā gadījumā lietotājam būs manuāli jāievada ceļš uz repozitoriju un commit id, kas, kā redzat, nav gluži ērti.

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

KĀ BŪT

Tagad izmēģināsim cita veida parametrus, lai apsvērtu visas tā priekšrocības.
Pirmo parametru veidosim ar tipu Choice Parameter, otro - Active Choices Reactive Reference Parameter. Parametrā ar izvēles veidu laukā Izvēles manuāli pievienosim to repozitoriju nosaukumus, kuros tiek glabāts mūsu mikropakalpojumu kods.

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Ja publikai šis raksts patīk, tad nākamajā rakstā aprakstīšu uzdevumu konfigurēšanas procesu Dženkinsā, izmantojot aprakstu caur kodu (Configuration as code), t.i. mums nevajadzēs manuāli ievadīt repozitoriju nosaukumus un izveidot parametrus, viss notiks automātiski (mūsu kods saņems repozitoriju sarakstu no SCM un izveidos parametru ar šo sarakstu).

Otrā parametra vērtības tiks aizpildītas dinamiski atkarībā no tā, kādu vērtību aizņem pirmais parametrs (test1 vai test2), jo katrai repozitorijai ir savs apņemšanos saraksts.

Active Choices Reaktīvais atsauces parametrs ir jāaizpilda šādi lauki:

  1. Vārds - parametra nosaukums.
  2. Scenārijs – kods, kas tiks izpildīts katru reizi, kad tiks mainīta parametra vērtība no lauka Atsauces parametrs (mūsu gadījumā, kad izvēlamies starp test1 un test2).
  3. Apraksts – īss parametra apraksts.
  4. Izvēles veids – skripta atgrieztā objekta veids (mūsu gadījumā mēs atgriezīsim html kodu).
  5. Atsauces parametrs – parametra nosaukums, kura vērtība tiek mainīta, tiks izpildīts kods no sadaļas Skripts.

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Turpināsim tieši ar šī parametra vissvarīgākā lauka aizpildīšanu. Mums tiek piedāvāti divi ieviešanas veidi, no kuriem izvēlēties: izmantojot Groovy skripts vai Scriptler skripts.
Mēs izvēlamies pirmo, jo Scriptler ir tikai spraudnis, kas saglabā iepriekš rakstītos skriptus un ļauj tos izmantot citos uzdevumos bez atkārtotas kopēšanas un ielīmēšanas.

Groovy kods, lai iegūtu visas saistības no atlasītās repozitorija:

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

Neiedziļinoties detaļās, šis kods kā ievadi saņem mikropakalpojuma nosaukumu (MICROSERVICE_NAME) un nosūta pieprasījumu uz Bitbucket (metode getCommitsForMicroservice).
Kā minēts iepriekš, šim kodam ir jāatgriež html, kas tiks parādīts lapā Veidot ar parametriem Dženkinsā, tāpēc visas no Bitbucket saņemtās vērtības mēs apkopojam sarakstā un pievienojam tās atlasei.

Pēc visu darbību veikšanas mums vajadzētu iegūt tik skaistu lapu Veidot ar parametriem.

Ja atlasījāt test1 mikropakalpojumu:

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Ja atlasījāt test2 mikropakalpojumu:

Dinamisko parametru izveide Dženkinsa darbā vai uzdevuma lietotājam draudzīgums

Piekrītiet, ka lietotājam būs daudz ērtāk šādā veidā mijiedarboties ar jūsu uzdevumu, nekā katru reizi kopēt url un meklēt nepieciešamo commit id.

PS Šajā rakstā ir sniegts ļoti vienkāršots piemērs, kas šajā formā var nebūt praktiski noderīgs, jo mezgliem ir daudz vairāk dažādu parametru, taču šī raksta mērķis bija parādīt, kā rīks darbojas, nevis nodrošināt darba risinājumu.

PSS Kā jau rakstīju iepriekš, ja šis raksts noder, tad nākamais būs par Dženkinsa uzdevumu dinamiska konfigurācija, izmantojot kodu.

Avots: www.habr.com

Pievieno komentāru