Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

Goeie dag, Habr!

Vandag wil ek graag een van die maniere deel hoe om te gebruik Aktiewe keuses-inprop doen die taak in Jenkins die mees verenigde en verstaanbare vir die gebruiker.

Inleiding

So 'n afkorting soos DevOps is lankal nie iets nuuts vir die IT-gemeenskap nie. Vir baie mense word die frase "maak DevOps" geassosieer met 'n soort towerknoppie, wanneer dit geklik word, verander die toepassingskode outomaties in 'n ontplooide en getoetste toepassing (dit is eintlik meer ingewikkeld, maar ons onttrek uit alle prosesse).

So, ons het 'n bevel ontvang om so 'n towerknoppie te maak sodat administrateurs die toepassing met een klik kan ontplooi. Daar is verskillende tipes implementering van hierdie taak: vanaf die skryf van 'n bot vir enige van die boodskappers en eindig met die ontwikkeling van 'n aparte toepassing. Nietemin, die doel van dit alles is dieselfde - om die bekendstelling van die samestelling en ontplooiing van die toepassing so deursigtig en gerieflik moontlik te maak.

In ons geval sal ons gebruik Jenkins.


Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

Taak

Skep 'n gerieflike Jenkins-werk wat die samestelling en (of) ontplooiing van die geselekteerde mikrodiens van 'n sekere weergawe sal laat loop.

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

Voer data in

Ons het verskeie bewaarplekke wat die bronkode van verskeie mikrodienste bevat.

Definieer parameters

Die insette van ons werk moet die volgende parameters ontvang:

  1. Die URL van die bewaarplek met die mikrodienskode wat ons wil bou en ontplooi wanneer die werk uitgevoer word.
  2. Die ID van die verbintenis om van te bou.

NETSO

Die maklikste manier om hierdie taak te bereik, is om twee parameters van tipe String te skep.

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

In hierdie geval sal die gebruiker die pad na die bewaarplek en die commit-ID handmatig moet invoer, wat, jy sien, nie baie gerieflik is nie.

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

AS OM TE WEES

Kom ons probeer nou 'n ander tipe parameters om al die voordele daarvan te sien.
Kom ons skep die eerste parameter met tipe Keuseparameter, die tweede - Active Choices Reactive Reference Parameter. In die parameter met die Keuse-tipe, sal ons die name van die bewaarplekke handmatig byvoeg in die Keuses-veld, waar die kode van ons mikrodienste gestoor word.

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

As die gehoor van hierdie artikel hou, sal ek in die volgende artikel die proses beskryf om take in Jenkins te konfigureer deur die beskrywing deur die kode (Configuration as code), d.w.s. ons hoef nie die name van die bewaarplekke handmatig in te voer en parameters te skep nie, alles sal outomaties gebeur (ons kode sal die lys van bewaarplekke van die SCM kry en 'n parameter met hierdie lys skep).

Die waardes van die tweede parameter sal dinamies ingevul word, afhangende van watter waarde die eerste parameter neem (toets1 of toets2), want elke bewaarplek het sy eie lys van commits.

Aktiewe keuses Reaktiewe verwysingsparameter het die volgende velde om in te vul:

  1. Naam - parameter naam.
  2. Script - kode wat uitgevoer sal word elke keer as die waarde van die parameter van die Verwysde parameter veld verander word (in ons geval, wanneer ons kies tussen toets1 en toets2).
  3. Beskrywing – kort beskrywing van die parameter.
  4. Tipe keuse - die tipe voorwerp wat deur die skrip teruggestuur word (in ons geval sal ons die HTML-kode terugstuur).
  5. verwysde parameter – die naam van die parameter, wanneer die waarde daarvan verander, sal die kode van die Skrip-afdeling uitgevoer word.

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

Kom ons gaan direk voort om die belangrikste veld in hierdie parameter in te vul. Ons word twee tipes implementering aangebied om van te kies: gebruik Groovy Script of Scriptler Script.
Ons kies die eerste een, aangesien Scriptler net 'n inprop is wat die skrifte wat jy reeds geskryf het, stoor en jou toelaat om dit in ander take te gebruik sonder om weer te kopieer-plak.

Groovy kode om alle commits van 'n geselekteerde bewaarplek te kry:

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

Sonder om in besonderhede in te gaan, ontvang hierdie kode die naam van die mikrodiens (MICROSERVICE_NAME) as invoer, stuur 'n versoek na Bitbucket (metode getCommitsForMicroservice) met behulp van sy API en kry die id en commit boodskap van alle commits vir die gegewe mikrodiens.
Soos vroeΓ«r genoem, behoort hierdie kode die HTML wat op die bladsy vertoon sal word, terug te gee Bou met parameters in Jenkins, dus draai ons al die waardes wat van Bitbucket ontvang is in 'n lys en voeg dit by die keuse.

Nadat ons al die stappe voltooi het, behoort ons so 'n pragtige bladsy te kry Bou met parameters.

As jy die toets1-mikrodiens gekies het:

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

As jy die toets2-mikrodiens gekies het:

Die skep van dinamiese parameters in 'n Jenkins-werk, of hoe om jou taak gebruikersvriendelik te maak

Stem saam dat dit vir die gebruiker baie geriefliker sal wees om op hierdie manier met jou taak om te gaan as om elke keer die url te kopieer en na die vereiste commit-ID te soek.

PS Hierdie artikel is 'n baie vereenvoudigde voorbeeld, wat dalk nie van praktiese nut in hierdie vorm is nie, aangesien samestellings baie meer verskillende parameters het, maar die doel van hierdie artikel was om te wys hoe die instrument werk, nie om 'n werkende oplossing te verskaf nie.

PSS Soos ek vroeΓ«r geskryf het, as hierdie artikel nuttig is, sal die volgende een oor handel dinamiese konfigurasie van Jenkins-take via kode.

Bron: will.com

Voeg 'n opmerking