Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Guten Tag, Habr!

Heute möchte ich einen der Wege teilen, wie man mithilfe von Active Choices Plugin eine Aufgabe in Jenkins der benutzerfreundlichsten und verstÀndlichsten Art und Weise umsetzen kann.

EinfĂŒhrung

Das Akronym DevOps ist fĂŒr die IT-Community schon lĂ€ngst nichts Neues mehr. Viele Menschen verbinden den Ausdruck „DevOps umsetzen“ mit einer Art Zaubertaste, bei deren BetĂ€tigung der Anwendungscode automatisch in eine bereitgestellte und getestete Anwendung umgewandelt wird (in Wirklichkeit ist alles viel komplexer, aber wir abstrahieren von den gesamten Prozessen).

Wir haben also den Auftrag erhalten, solch eine Zaubertaste zu erstellen, damit Administratoren die Anwendung mit einem Klick bereitstellen können. Es gibt verschiedene Möglichkeiten, diese Aufgabe umzusetzen: angefangen bei der Erstellung eines Bots fĂŒr einen der Messenger bis hin zur Entwicklung einer separaten Anwendung. Dennoch bleibt das Ziel dasselbe – den Start des Builds und die Bereitstellung der Anwendung so transparent und bequem wie möglich zu gestalten.

In unserem Fall werden wir nutzen Jenkins.


Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Aufgabe

Eine benutzerfreundliche Jenkins-Job zu erstellen, die den Build und (oder) das Deployment des ausgewÀhlten Mikrodienstes in einer bestimmten Version startet.

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Eingabedaten

Wir haben mehrere Repositories, in denen der Quellcode verschiedener Mikrodienste liegt.

Festlegung der Parameter

Die folgenden Parameter mĂŒssen in unsere Job eingegeben werden:

  1. URL des Repositories mit dem Code des Mikrodienstes, den wir bei der AusfĂŒhrung der Job zusammensetzen und bereitstellen wollen.
  2. ID des Commits, von dem der Build erfolgen soll.

AS IS

Der einfachste Weg, die gestellte Aufgabe zu erfĂŒllen, ist, zwei Parameter vom Typ String zu erstellen.

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

In diesem Fall muss der Benutzer den Pfad zum Repository und die ID des Commits manuell eingeben, was, seien wir ehrlich, nicht gerade bequem ist.

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

AS TO BE

Jetzt versuchen wir einen anderen Parameter-Typ, um alle seine Vorteile zu betrachten.
Wir erstellen den ersten Parameter vom Typ Choice Parameter, den zweiten – Active Choices Reactive Reference Parameter. In das Choice-Feld geben wir manuell die Namen der Repositories ein, in denen der Code unserer Mikrodienste gespeichert ist.

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Wenn dieser Artikel dem Publikum gefĂ€llt, werde ich im nĂ€chsten Artikel den Prozess der Konfiguration von Aufgaben in Jenkins beschreiben, wobei ich die Beschreibung ĂŒber Code (Configuration as code) verwenden werde, d.h. wir mĂŒssen die Repository-Namen nicht manuell eingeben und Parameter erstellen, alles wird automatisch geschehen (unser Code erhĂ€lt die Liste der Repositories aus SCM und erstellt einen Parameter mit dieser Liste).

Die Werte des zweiten Parameters werden dynamisch ausgefĂŒllt, abhĂ€ngig davon, welchen Wert der erste Parameter (test1 oder test2) annimmt, denn jedes Repository hat seine eigene Liste von Commits.

Active Choices Reactive Reference Parameter hat folgende Felder zur AusfĂŒllung:

  1. Name – Parametername.
  2. Script – Code, der jedes Mal ausgefĂŒhrt wird, wenn sich der Wert des Parameters im Feld Referenced parameter Ă€ndert (in unserem Fall, wenn wir zwischen test1 und test2 auswĂ€hlen).
  3. Beschreibung – kurze Beschreibung des Parameters.
  4. Choice Type – Typ des von dem Skript zurĂŒckgegebenen Objekts (in unserem Fall geben wir HTML-Code zurĂŒck).
  5. Referenced parameter – Name des Parameters, dessen WertĂ€nderung den Code aus dem Abschnitt Script ausfĂŒhren wird.

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Kommen wir direkt zum AusfĂŒllen des wichtigsten Feldes in diesem Parameter. Zur Auswahl stehen uns zwei Implementierungsarten: Verwendung von Groovy Script oder Scriptler Script.
Wir wÀhlen das erste, da Scriptler nur ein Plugin ist, das bereits von Ihnen erstellte Skripte speichert und deren Verwendung in anderen Aufgaben ohne wiederholtes Copy-Paste ermöglicht.

Groovy-Code zum Abrufen aller Commits aus dem ausgewÀhlten Repository:

AUTH = "Benutzername und Passwort in Base64"                           
GIT_URL = "URL zu Ihrem SCM (https://bitbucket.org/)"                       
PROJECT_NAME = "Name des Projekt-Containers, in dem die Repositories liegen"

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

Wenn wir nicht ins Detail gehen, dann erhĂ€lt dieser Code den Namen des Mikrodienstes (MICROSERVICE_NAME), sendet eine Anfrage an Bitbucket (Methode getCommitsForMicroservice), indem er dessen API verwendet, und erhĂ€lt die ID und den Commit-Message aller Commits fĂŒr diesen Mikrodienst.
Wie bereits erwĂ€hnt, sollte dieser Code HTML zurĂŒckgeben, das auf der Seite Build with Parameters in Jenkins angezeigt wird, deshalb wickeln wir alle erhaltenen Werte aus Bitbucket in eine Liste und fĂŒgen sie in das Select-Element ein.

Nach all diesen Aktionen sollten wir eine so schöne Seite erhalten. Build with Parameters.

Wenn wir den Mikrodienst test1 ausgewÀhlt haben:

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Wenn wir den Mikrodienst test2 ausgewÀhlt haben:

Erstellung dynamscher Parameter in Jenkins Jobs oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten

Sie werden zustimmen, dass es fĂŒr den Benutzer viel angenehmer sein wird, auf diese Weise mit Ihrer Aufgabe zu interagieren, als jedes Mal die URL zu kopieren und die benötigte Commit-ID zu suchen.

P.S. In diesem Artikel wird ein sehr vereinfachtes Beispiel vorgestellt, das möglicherweise in dieser Form keine praktische Anwendung hat, da Assemblierungen weitaus mehr verschiedene Parameter aufweisen. Ziel dieses Artikels war es jedoch, die Funktionsweise des Werkzeugs zu demonstrieren und nicht eine sofortige Lösung anzubieten.

P.S.S. Wie bereits zuvor erwĂ€hnt, wenn dieser Artikel nĂŒtzlich ist, wird der nĂ€chste ĂŒber dynamische Konfiguration von Jenkins-Aufgaben ĂŒber Code.

Quelle: habr.com

ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server đŸ”„ ZuverlĂ€ssiges Hosting fĂŒr Websites mit DDoS-Schutz kaufen, VPS VDS Server - ProHoster