Erstellen dynamischer Parameter in einem Jenkins-Job oder wie Sie Ihre Aufgabe benutzerfreundlich gestalten können

Guten Tag, Habr !


Heute möchte ich eine der Möglichkeiten vorstellen , wie Active Choices Plugin verwendet werden kann , um die Aufgabe in Jenkins für den Benutzer am einheitlichsten und verständlichsten zu gestalten.


Einleitung


Eine solche Abkürzung wie DevOps ist für die IT-Community nichts Neues mehr. Für viele Menschen ist der Ausdruck „make DevOps“ mit einer Art magischer Schaltfläche verbunden. Wenn Sie darauf klicken, wird der Anwendungscode automatisch zu einer bereitgestellten und getesteten Anwendung (alles ist tatsächlich komplizierter, aber wir abstrahieren von allen Prozessen).


Daher haben wir den Auftrag erhalten, einen solchen magischen Knopf zu erstellen, damit Administratoren die Anwendung mit einem Klick bereitstellen können. Es gibt verschiedene Arten der Implementierung dieser Aufgabe: vom Schreiben eines Bots für einen der Messenger bis zur Entwicklung einer separaten Anwendung. Der Zweck all dessen ist jedoch derselbe: Den Start der Zusammenstellung und Bereitstellung der Anwendung so transparent und bequem wie möglich zu gestalten.


In unserem Fall werden wir Jenkins verwenden .



Herausforderung


Erstellen Sie einen praktischen Jenkins-Job, der die Assembly und / oder Bereitstellung des ausgewählten Microservice einer bestimmten Version ausführt.



Daten eingeben


Wir haben mehrere Repositorys, die den Quellcode verschiedener Microservices enthalten.


Parameterdefinition


Die folgenden Parameter sollten in die Eingabe unseres Jobs einfließen:


  1. Die URL des Repositorys mit dem Microservice-Code, den wir beim Starten des Jobs sammeln und bereitstellen möchten.
  2. ID des Commits, von dem aus die Assembly stattfinden wird.

WIE BESEHEN


Am einfachsten erledigen Sie die Aufgabe, indem Sie zwei Parameter vom Typ String erstellen.



In diesem Fall muss der Benutzer den Pfad zum Repository und die Festschreibungs-ID manuell eingeben, was, wie Sie sehen, nicht ganz praktisch ist.



WIE ZU SEIN


Versuchen wir nun einen anderen Parametertyp, um alle seine Vorteile zu berücksichtigen.
Erstellen Sie den ersten Parameter vom Typ Auswahlparameter, den zweiten - Aktive Auswahl - Reaktiver Referenzparameter. Im Parameter mit dem Typ Auswahl fügen wir die Namen der Repositorys hinzu, in denen der Code unserer Microservices manuell im Feld Auswahl gespeichert wird.



Wenn das Publikum diesen Artikel mag, dann beschreibe ich im nächsten Artikel den Prozess der Konfiguration von Aufgaben in Jenkins unter Verwendung der Beschreibung durch den Code (Konfiguration als Code), d. H. Es ist nicht erforderlich, die Namen der Repositorys manuell einzugeben und Parameter zu erstellen. Alles wird automatisch ausgeführt (unser Code erhält eine Liste der Repositorys von SCM und erstellt einen Parameter mit dieser Liste).

Die Werte des zweiten Parameters werden bei uns dynamisch gefüllt, je nachdem, welchen Wert der erste Parameter annimmt (test1 oder test2), da jedes Repository eine eigene Liste von Commits hat.


Aktive Auswahl Reaktiver Referenzparameter enthält die folgenden Felder, die ausgefüllt werden müssen:


  1. Name - der Name des Parameters.
  2. Skript - Der Code, der jedes Mal ausgeführt wird, wenn der Wert des Parameters im Feld Referenzierter Parameter geändert wird (in unserem Fall, wenn wir zwischen Test1 und Test2 wählen).
  3. Beschreibung - eine kurze Beschreibung des Parameters.
  4. Auswahltyp - der Typ des Objekts, das vom Skript zurückgegeben wird (in unserem Fall geben wir den HTML-Code zurück).
  5. Referenzierter Parameter - Der Name des Parameters, wenn der Wert geändert wird, für den der Code aus dem Skriptabschnitt ausgeführt wird.


Wir gehen direkt zum Ausfüllen des Hauptfeldes in diesem Parameter über. Es stehen zwei Arten der Implementierung zur Auswahl: Groovy Script oder Scriptler Script .
Wir wählen das erste aus, da Scriptler nur ein Plug-In ist, das bereits geschriebene Skripte speichert und es Ihnen ermöglicht, sie in anderen Aufgaben zu verwenden, ohne sie erneut kopieren zu müssen.


Groovy-Code zum Abrufen aller Commits aus dem ausgewählten 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() 

Wenn Sie nicht auf Details eingehen, erhält dieser Code den Namen des Mikrodienstes (MICROSERVICE_NAME), sendet eine Anforderung an Bitbucket ( getCommitsForMicroservice- Methode) unter Verwendung der API und empfängt die ID- und Festschreibungsnachricht aller Festschreibungen für diesen Mikrodienst.
Wie bereits erwähnt, sollte dieser Code den HTML-Code zurückgeben, der auf der Seite " Mit Parametern erstellen" in Jenkins angezeigt wird. Daher werden alle von Bitbucket empfangenen Werte in die Liste eingeschlossen und zur Auswahl hinzugefügt.


Nach Abschluss aller Schritte sollten wir eine so schöne Seite mit Parametern erstellen .


Wenn Sie test1 microservice auswählen:



Wenn Sie test2 microservice wählen:



Stimmen Sie zu, dass es für den Benutzer viel bequemer ist, auf diese Weise mit Ihrer Aufgabe zu interagieren, als die URL jedes Mal zu kopieren und nach der erforderlichen Festschreibungs-ID zu suchen.


PS Dieser Artikel enthält ein sehr vereinfachtes Beispiel, das in dieser Form möglicherweise keine praktische Anwendung findet, da Baugruppen viel andere Parameter aufweisen. Der Zweck dieses Artikels bestand jedoch darin, die Funktionsweise des Werkzeugs zu veranschaulichen und keine funktionierende Lösung bereitzustellen.


PSS Wie ich bereits geschrieben habe, geht es in diesem Artikel um die dynamische Konfiguration von Jenkins-Tasks mithilfe von Code .

Source: https://habr.com/ru/post/de485664/


All Articles