Beim Schreiben von Jenkins-Pipelines scheint es sehr unpraktisch zu sein, jede neue Änderung festzuschreiben, um zu prüfen, ob sie funktioniert.
Gibt es eine Möglichkeit, diese lokal auszuführen, ohne den Code festzuschreiben?
Beim Schreiben von Jenkins-Pipelines scheint es sehr unpraktisch zu sein, jede neue Änderung festzuschreiben, um zu prüfen, ob sie funktioniert.
Gibt es eine Möglichkeit, diese lokal auszuführen, ohne den Code festzuschreiben?
Sie können das Pipeline-Skript nicht lokal ausführen, da der gesamte Zweck darin besteht, Jenkins zu skripten. (Dies ist ein Grund, warum es am besten ist, Ihren Jenkinsfile
Code kurz und auf Code zu beschränken, der sich tatsächlich mit Jenkins-Funktionen befasst. Ihre eigentliche Erstellungslogik sollte mit externen Prozessen oder Erstellungswerkzeugen behandelt werden, die Sie über eine Zeile sh
oder einen bat
Schritt aufrufen .)
Wenn Sie eine Änderung testen wollen Jenkinsfile
leben , aber ohne begehen sie, verwenden Sie die Replay - Funktion hinzugefügt 1.14
JENKINS-33925 verfolgt das für ein automatisiertes Testframework gewünschte.
Ich habe eine Lösung, die für mich gut funktioniert. Es besteht aus einem lokalen Jenkins, das im Docker ausgeführt wird, und einem Git-Web-Hook, um die Pipeline in den lokalen Jenkins bei jedem Commit auszulösen. Sie müssen nicht mehr auf Ihr Github- oder Bitbucket-Repository pushen, um die Pipeline zu testen.
Dies wurde nur in einer Linux-Umgebung getestet.
Es ist ziemlich einfach, diese Arbeit zu machen, obwohl diese Anweisung ein bisschen lang ist. Die meisten Schritte sind da.
Das brauchen Sie
Das ist wie man es macht
Jenkins Docker
Erstellen Sie anstelle Ihrer Wahl eine Datei namens Dockerfile. Ich platziere es und
/opt/docker/jenkins/Dockerfile
fülle es damit aus:Erstellen Sie das Bild local_jenkins
Dies müssen Sie nur einmal tun oder nachdem Sie der Docker-Datei etwas hinzugefügt haben.
Starten Sie local_jenkins und starten Sie es neu
Von Zeit zu Zeit möchten Sie Jenkins einfach starten und neu starten. ZB nach einem Neustart Ihres Computers. Dafür habe ich einen Alias erstellt, den ich
.bash_aliases
in meinen Home-Ordner eingefügt habe.Stellen Sie sicher, dass der
/opt/docker/jenkins/jenkins_home
Ordner vorhanden ist und dass Sie über Lese- und Schreibrechte des Benutzers verfügen.Um Ihre Jenkins zu starten oder neu zu starten, geben Sie einfach Folgendes ein:
Alles, was Sie in Ihren lokalen Jenkins tun, wird im Ordner / opt / docker / jenkins / jenkins_home gespeichert und zwischen den Neustarts beibehalten.
Erstellen Sie einen SSH-Zugriffsschlüssel in Ihren Docker Jenkins
Dies ist ein sehr wichtiger Teil, damit dies funktioniert. Zuerst starten wir den Docker-Container und erstellen eine Bash-Shell dazu:
Sie haben jetzt den Docker-Container eingegeben, den Sie an so etwas wie
jenkins@e7b23bad10aa:/$
in Ihrem Terminal sehen können. Der Hash nach dem @ wird sich sicher unterscheiden.Erstellen Sie den Schlüssel
Drücken Sie bei allen Fragen die Eingabetaste, bis Sie die Eingabeaufforderung erhalten
Kopieren Sie den Schlüssel auf Ihren Computer. Aus dem Docker-Container heraus ist Ihr Computer 172.17.0.1, sollten Sie sich fragen.
user = Ihr Benutzername und 172.17.0.1 ist die IP-Adresse Ihres Computers aus dem Docker-Container.
Sie müssen an dieser Stelle Ihr Passwort eingeben.
Versuchen wir nun, die Schleife zu vervollständigen, indem Sie aus dem Docker-Container auf Ihren Computer senden.
Dieses Mal sollten Sie Ihr Passwort nicht eingeben müssen. Wenn Sie dies tun, ist etwas schief gelaufen und Sie müssen es erneut versuchen.
Sie befinden sich jetzt im Home-Ordner Ihres Computers. Versuchen Sie es
ls
und schauen Sie.Hören Sie hier nicht auf, da wir eine Kette von SSH-Muscheln haben, aus denen wir herauskommen müssen.
Richtig! Jetzt sind wir zurück und bereit weiterzumachen.
Installieren Sie Ihre Jenkins
Sie finden Ihre lokalen Jenkins in Ihrem Browser unter http: // localhost: 8787 .
Wenn Sie Ihren Browser zum ersten Mal auf Ihre lokalen Jenkins richten, werden Sie von einem Installationsassistenten begeistert sein. Die Standardeinstellungen sind in Ordnung. Stellen Sie jedoch sicher, dass Sie das Pipeline-Plugin während des Setups installieren.
Richten Sie Ihre Jenkins ein
Es ist sehr wichtig, dass Sie die matrixbasierte Sicherheit unter http: // localhost: 8787 / configureSecurity aktivieren und sich alle Rechte einräumen, indem Sie sich der Matrix hinzufügen und alle Kästchen ankreuzen. (Ganz rechts befindet sich ein Kontrollkästchen.)
Jenkins’ own user database
als SicherheitsbereichMatrix-based security
im Abschnitt AutorisierungUser/group to add:
und klicken Sie auf die[ Add ]
SchaltflächePrevent Cross Site Request Forgery exploits
ist. (Da dieser Jenkins nur von Ihrem Computer aus erreichbar ist, ist dies keine so große Sache.)[ Save ]
und melden Sie sich bei Jenkins ab und wieder an, um sicherzustellen, dass es funktioniert. Wenn dies nicht der Fall ist, müssen Sie/opt/docker/jenkins/jenkins_home
vor dem Neustart von vorne beginnen und den Ordner leerenFügen Sie den Git-Benutzer hinzu
Wir müssen unserem Git-Hook erlauben, sich mit minimalen Rechten bei unseren lokalen Jenkins anzumelden. Es reicht aus, nur Arbeitsplätze zu sehen und aufzubauen. Deshalb erstellen wir einen Benutzer
git
mit Passwortlogin
.Richten Sie Ihren Browser auf http: // localhost: 8787 / securityRealm / addUser und fügen Sie ihn
git
als Benutzernamen undlogin
als Kennwort hinzu. Klicken Sie auf[ Create User ]
.Fügen Sie dem Git-Benutzer die Rechte hinzu
Gehen Sie auf die http: // localhost: 8787 / configureSecurity Seite in Ihrem Browser. Fügen Sie den Git-Benutzer zur Matrix hinzu:
git
in das FeldUser/group to add:
und klicken Sie auf[ Add ]
Jetzt ist es Zeit, die Kontrollkästchen für minimale Rechte für den Git-Benutzer zu aktivieren. Nur diese werden benötigt:
Stellen Sie sicher, dass das
Prevent Cross Site Request Forgery exploits
Kontrollkästchen deaktiviert ist und klicken Sie auf[ Save ]
Erstellen Sie das Pipeline-Projekt
Wir gehen davon aus, dass wir den Benutzernamen haben
user
und unser git-fähiges Projekt mit demJenkinsfile
darin aufgerufen wirdproject
und sich unter befindet/home/user/projects/project
Fügen Sie in Ihrem http: // localhost: 8787 Jenkins ein neues Pipeline-Projekt hinzu. Ich habe es als Referenz Hookpipeline genannt.
New Item
im Jenkins-Menü aufhookpipeline
[ OK ]
Poll SCM
im Abschnitt Build-Trigger. Lassen Sie den Zeitplan leer.Pipeline script from SCM
Repository URL
Feld eingeben[email protected]:projects/project/.git
Script Path
Feld eingebenJenkinsfile
Erstellen Sie den Git-Hook
Gehen Sie zum
/home/user/projects/project/.git/hooks
Ordner und erstellen Sie eine Datei mit dem Namenpost-commit
:Machen Sie diese Datei ausführbar:
Testen Sie den Post-Commit-Hook:
Überprüfen Sie in Jenkins, ob Ihr Hookpipeline-Projekt ausgelöst wurde.
Nehmen Sie zum Schluss eine beliebige Änderung an Ihrem Projekt vor, fügen Sie die Änderungen hinzu und führen Sie ein Commit durch. Dies löst nun die Pipeline in Ihren lokalen Jenkins aus.
Glückliche Tage!
quelle
docker build -t local_jenkins /opt/docker/jenkins/Dockerfile
mit ,docker build -t local_jenkins /opt/docker/jenkins
weil Docker beschwerten sich über „nicht in der Lage Kontext vorzubereiten: Kontext muss ein Verzeichnis sein“.$ docker inspect jenkins | grep Gateway
ssh [email protected]
statt der IP-Adresse. Stellen Sie außerdem sicher, dass Sie die Remote-Anmeldefunktion in den Systemeinstellungen von macOs -> Menü fürTL; DR
Langversion
Jenkins Pipeline-Tests werden immer schmerzhafter. Im Gegensatz zum klassischen Ansatz der deklarativen Jobkonfiguration, bei dem der Benutzer auf die Benutzeroberfläche beschränkt war, ist die neue Jenkins-Pipeline eine vollwertige Programmiersprache für den Erstellungsprozess, bei dem Sie den deklarativen Teil mit Ihrem eigenen Code mischen. Als gute Entwickler möchten wir auch einige Unit-Tests für diese Art von Code durchführen.
Bei der Entwicklung von Jenkins-Pipelines sollten Sie drei Schritte ausführen. Der Schritt 1. sollte 80% der Anwendungsfälle abdecken.
Beispiele
Das PipelineUnit GitHub-Repo enthält einige Spock-Beispiele zur Verwendung des Jenkins Pipeline Unit-Testframeworks
quelle
Jenkins verfügt über eine Wiedergabefunktion, mit der Sie einen Auftrag schnell wiedergeben können, ohne die Quellen zu aktualisieren:
quelle
Zum Zeitpunkt des Schreibens (Ende Juli 2017) mit dem Blue Ocean- Plugin können Sie die Syntax einer deklarativen Pipeline direkt im visuellen Pipeline-Editor überprüfen . Der Editor funktioniert über die Blue Ocean-Benutzeroberfläche, wenn Sie nur für Github-Projekte auf "Konfigurieren" klicken (dies ist ein bekanntes Problem, und sie arbeiten daran, dass es auch auf Git usw. funktioniert).
Wie in dieser Frage erläutert , können Sie den Editor öffnen, um Folgendes zu durchsuchen:
[Jenkins URL]/blue/organizations/jenkins/pipeline-editor/
Klicken Sie dann in die Mitte der Seite und drücken Sie
Ctrl+S
, um einen Textbereich zu öffnen, in den Sie ein deklaratives Pipeline-Skript einfügen können. Wenn Sie auf Aktualisieren klicken und ein Syntaxfehler vorliegt, teilt Ihnen der Editor mit, wo sich der Syntaxfehler befindet. Wie in diesem Screenshot:Wenn kein Syntaxfehler vorliegt, wird der Textbereich geschlossen und die Seite visualisiert Ihre Pipeline. Keine Sorge, es wird nichts gespeichert (wenn es sich um ein Github-Projekt handelt, wird die Jenkinsfile-Änderung vorgenommen).
Ich bin neu bei Jenkins und das ist sehr hilfreich, ohne das musste ich viele Male eine Jenkins-Datei festschreiben, bis es funktioniert (sehr nervig!). Hoffe das hilft. Prost.
quelle
Ein bisschen spät zur Party, aber deshalb habe ich
jenny
eine kleine Neuimplementierung einiger Kernschritte von Jenkinsfile geschrieben. ( https://github.com/bmustiata/jenny )quelle
Soweit ich weiß, ist dieses Pipeline-Plugin die "Engine" der neuen Jenkinsfile-Mechanik. Ich bin mir also ziemlich sicher, dass Sie damit Ihre Skripte lokal testen können.
Ich bin mir nicht sicher, ob zusätzliche Schritte erforderlich sind, wenn Sie es in eine Jenkins-Datei kopieren, aber die Syntax usw. sollte genau gleich sein.
Bearbeiten: Die Referenz auf der "Engine" gefunden, diese Funktionsbeschreibung, letzter Absatz, erster Eintrag überprüfen .
quelle
In meinem Entwicklungs-Setup - ohne einen richtigen Groovy-Editor - sind viele Jenkinsfile-Probleme auf einfache Syntaxfehler zurückzuführen . Um dieses Problem zu beheben, können Sie die Jenkins-Datei anhand Ihrer Jenkins-Instanz (ausgeführt unter
$JENKINS_HTTP_URL
) validieren :curl -X POST -H $(curl '$JENKINS_HTTP_URL/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)') -F "jenkinsfile=<Jenkinsfile" $JENKINS_HTTP_URL/pipeline-model-converter/validate
Der obige Befehl ist eine leicht modifizierte Version von https://github.com/jenkinsci/pipeline-model-definition-plugin/wiki/Validating-(or-linting)-a-Declarative-Jenkinsfile-from-the-command-line
quelle
Abgesehen von der Wiedergabefunktion, die andere bereits erwähnt haben (ebenso wie ihre Nützlichkeit!), Fand ich Folgendes auch nützlich:
quelle
Fügen Sie Ihren SSH-Schlüssel in Ihr Jenkins-Profil ein und verwenden Sie den deklarativen Linter wie folgt:
Dadurch wird eine statische Analyse Ihrer Jenkins-Datei durchgeführt. Definieren Sie im Editor Ihrer Wahl eine Tastenkombination, die diesen Befehl automatisch ausführt. Gehen Sie in Visual Studio Code, den ich verwende, zu Aufgaben> Aufgaben konfigurieren und verwenden Sie dann den folgenden JSON, um einen Validate Jenkinsfile- Befehl zu erstellen :
quelle
Ich benutze Replay Future, um ein Update zu machen und schnell zu laufen.
quelle
Mit einigen Einschränkungen und für geskriptete Pipelines verwende ich diese Lösung:
quelle