It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

Goeie, Habr!

Hjoed wol ik ien fan 'e manieren om te brûken te dielen Aktive karren Plugin dwaan de taak yn Jenkins de meast ferienige en brûkerfreonlikste.

Ynlieding

Sa'n ôfkoarting as DevOps is net mear wat nijs foar de IT-mienskip. Foar in protte minsken is de útdrukking "do DevOps" assosjearre mei in soarte fan magyske knop, as jo klikke, feroaret de applikaasjekoade automatysk yn in ynset en hifke applikaasje (alles is eins yngewikkelder, mar wy abstrahere fan alle prosessen).

Dat, wy krigen in opdracht om sa'n magyske knop te meitsjen sadat behearders de applikaasje mei ien klik koene ynsette. D'r binne ferskate soarten ymplemintaasje fan dizze taak: fan it skriuwen fan in bot foar ien fan 'e instant messengers oant it ûntwikkeljen fan in aparte applikaasje. Dit alles hat lykwols itselde doel - it begjinnen fan it bouwen en ynsetten fan 'e applikaasje sa transparant en handich mooglik te meitsjen.

Yn ús gefal sille wy brûke Jenkins.


It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

Objective

Meitsje in handige Jenkins-baan dy't de bou en (of) ynset fan 'e selekteare mikrotsjinst fan in bepaalde ferzje sil lansearje.

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

Ynfier gegevens

Wy hawwe ferskate repositories mei de boarnekoade fan ferskate mikrotsjinsten.

It definiearjen fan parameters

De folgjende parameters moatte wurde ûntfongen as ynput foar ús taak:

  1. De URL fan it repository mei de mikroservicekoade dy't wy wolle bouwe en ynsette by it útfieren fan de baan.
  2. ID fan de commit dêr't de bou sil plakfine.

SA'T IS

De maklikste manier om dizze taak út te fieren is om twa parameters fan it type String te meitsjen.

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

Yn dit gefal sil de brûker it paad nei it repository en de commit-id moatte ynfiere, wat, sjogge jo, net hielendal handich is.

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

AS TO BE

Litte wy no in oar type parameters besykje om al har foardielen te beskôgjen.
Litte wy de earste parameter oanmeitsje mei it type Choice Parameter, de twadde - Active Choices Reactive Reference Parameter. Yn 'e parameter mei it Choice-type sille wy de nammen fan' e repositories manuell tafoegje yn it fjild Choices wêr't de koade fan ús mikrotsjinsten opslein is.

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

As it publyk dit artikel liket, dan sil ik yn it folgjende artikel it proses beskriuwe fan it konfigurearjen fan taken yn Jenkins, mei in beskriuwing fia koade (Konfiguraasje as koade), d.w.s. wy hoege gjin repositorynammen manuell yn te fieren en parameters oan te meitsjen, alles sil automatysk barre (ús koade sil in list mei repositories krije fan SCM en in parameter meitsje mei dizze list).

De wearden fan 'e twadde parameter sille dynamysk ynfolle wurde, ôfhinklik fan hokker wearde de earste parameter nimt (test1 of test2), om't elke repository in eigen list mei commits hat.

Aktive karren Reactive Reference Parameter hat de folgjende fjilden om yn te foljen:

  1. namme - parameter namme.
  2. Skrift - koade dy't sil wurde útfierd elke kear as de wearde fan 'e parameter út it Referenced parameter fjild wurdt feroare (yn ús gefal, as wy kieze tusken test1 en test2).
  3. Beskriuwing - koarte beskriuwing fan de parameter.
  4. Soart kar - it type objekt weromjûn troch it skript (yn ús gefal sille wy html-koade weromjaan).
  5. Ferwiisde parameter - de namme fan 'e parameter, as de wearde dêrfan wurdt feroare, sil de koade fan' e Skript-seksje wurde útfierd.

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

Litte wy direkt trochgean mei it ynfoljen fan it wichtichste fjild yn dizze parameter. Wy wurde twa soarten ymplemintaasje oanbean om út te kiezen: gebrûk Groovy Skript of Skriptler Skript.
Wy kieze de earste, om't Scriptler gewoan in plugin is dy't skripts bewarret dy't jo earder skreaun hawwe en kinne jo se brûke yn oare taken sûnder opnij te kopiearjen en plakke.

Groovy koade om alle commits te krijen fan it selekteare repository:

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

Sûnder yn detail yn te gean, ûntfangt dizze koade de mikroservicenamme (MICROSERVICE_NAME) as ynfier en stjoert in fersyk nei Bitbucket (metoade getCommitsForMicroservice) mei help fan syn API, en krijt de id en commit berjocht fan alle commits foar in opjûne microservice.
Lykas earder neamd, moat dizze koade html weromjaan dy't op 'e side sil wurde werjûn Bouwe mei parameters yn Jenkins, dus wy pakke alle ûntfongen wearden fan Bitbucket yn in list en foegje se ta om te selektearjen.

Nei it foltôgjen fan alle stappen moatte wy sa'n prachtige side krije Bouwe mei parameters.

As jo ​​test1 microservice selekteare:

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

As jo ​​test2 microservice selekteare:

It meitsjen fan dynamyske parameters yn in Jenkins-baan, of hoe jo jo taak brûkerfreonlik meitsje kinne

It iens dat it folle handiger sil wêze foar de brûker om op dizze manier mei jo taak te ynteraksje dan elke kear de url te kopiearjen en nei de fereaske commit-id te sykjen.

PS Dit artikel jout in hiel ferienfâldige foarbyld, dat kin net wêze fan praktysk nut yn dizze foarm, sûnt gearkomsten hawwe folle mear ferskillende parameters, mar it doel fan dit artikel wie te sjen hoe't it ark wurket, net te foarsjen in wurkjende oplossing.

PSS Lykas ik earder skreau, as dit artikel nuttich is, dan sil it folgjende oer gean dynamyske konfiguraasje fan Jenkins taken fia koade.

Boarne: www.habr.com

Add a comment