Diese Docker-basierte Entwicklungsumgebung ist für neue Mitwirkende der Jenkins-Warnungen und Deckungs-Plugins zur Verfügung, um die anfängliche Anstiegszeit zu verkürzen. Es besteht aus den folgenden Teilen:
Ich habe diese Entwicklungsumgebung im Januar 2022 in einem aufgezeichneten Jenkins Online -Meetup vorgestellt.
Die Entwicklungsumgebung wurde auf MacOS, Ubuntu Linux (in einer auf macOS ausgeführten virtuellen Maschine) und Windows getestet. Pull -Anfragen sind immer willkommen.
Neueste Version der folgenden Tools:
Darüber hinaus sind die neuesten Versionen der folgenden Tools erforderlich:
Wenn Fehler auftreten, beachten Sie die Hinweise zur Fehlerbehebung unten. Für Windows -Benutzer: Verwenden Sie die Git -Bash, um die Shell -Skripte auszuführen.
./bin/clone-repos-https.sh (oder ./bin/clone-repos.sh , wenn Sie bereits einen SSH-Schlüssel in GitHub eingerichtet haben). Sie müssen warten, bis der Build erfolgreich ist, bevor Intellij eröffnet wird. Andernfalls findet Intellij nicht alle erzeugten Klassen. Das erste Mal, dass Maven -Benutzer ein paar Minuten warten müssen, bis alle Abhängigkeiten von Maven Central heruntergeladen wurden.warnings-ng-plugin-devenv./bin/jenkins.sh . Dieser Befehl erstellt das Jenkins Docker -Bild, lädt alle registrierten Plugins herunter und initialisiert den Jenkins -Arbeitsbereich mit einigen Jobs. Dies erfordert auch einige Minuten (siehe Schritt 9). Wenn alle Downloads erfolgreich sind, die Installation jedoch aufgrund von Fehlern fehlgeschlagen ist, beheben Sie sie und führen Sie mvn -V -U -e install –DskipTests aus, um nur die Installation wiederzuholen.
Wenn die Fehlerzeile "Befehlszeile zu lang ist". Führen Sie die folgenden Schritte aus:
@argfile (Java9+) aus.Wenn Tests aufgrund eines Jenkins -Test -Timeouts fehlschlagen, führen Sie die folgenden Schritte aus:
-Djenkins.test.timeout=1000 . Dies erhöht die Zeitüberschreitung auf 1000 Sekunden. Sie können ein einfaches Shell-Skript ( ./bin/clone-repos.sh ) verwenden, um die Module in einem einzigen Schritt zu klonen und zu erstellen. Das Skript überprüft die folgenden Module mit dem Git SSH -Protokoll. Dies erfordert, dass Sie Ihren öffentlichen Schlüssel in GitHub registriert haben. Wenn Sie in GitHub keine Schlüssel haben, können Sie das Skript ./bin/clone-repos-https.sh alternativ verwenden, das das HTTPS-Protokoll verwendet.
Wenn Sie planen, eine Pull -Anfrage für eine der Plugins zu stellen, müssen Sie eine Gabel des Repositorys erstellen und alle Änderungen in dieser Gabel vornehmen. Ich habe in meinem Coding -Style -Projekt eine GitHub Collaboration -Dokumentation erstellt.
Intellij (Ultimate) ist die wichtigste unterstützte Entwicklungsumgebung für das Warnungen -Plugin. Ein vordefiniertes Projekt wird im Ordner gespeichert .idea IDEA, das auf alle Module des Warnungen -Plugins verweist. Dieses Projekt enthält Voreinstellungen meines Codierungsstils und einige andere hilfreiche Konfigurationen.
Es sollte möglich sein, auch andere IDEs (Eclipse, Netbeans, Visual Studio Code) zu verwenden.
Verwenden Sie die bereitgestellten Intellij-Auslaufkonfigurationen All in [module-name] um die Einheiten- und Integrationstests des entsprechenden Moduls auszuführen. Diese Konfigurationen sind bereits konfiguriert, um die Zweigabdeckung der entsprechenden Modulpakete aufzuzeichnen (verwenden Sie den Run with Coverage Deckungsaktionen).
Bevor Sie Ihre Änderungen debuggen, müssen Sie zunächst herausfinden, wo Ihr Code ausgeführt wird: auf dem Controller oder auf dem Agenten? Wenn Sie sich nicht sicher sind, führen Sie beide Remote -Debugger aus, setzen Sie einige Haltepunkte und warten Sie, bis der entsprechende Debugger aufhört.
Die Docker Compose -Konfiguration startet den Jenkins -Controller automatisch im 'Debug' -Modus, dh er hört Remote -Debug -Anfragen an. Wenn Ihr Code im Controller ausgeführt wird, müssen Sie bei localhost:8000 (am Docker -Container an denselben Port zugeordnet). Verwenden Sie die bereitgestellte Jenkins Controller (Remote Debugger) -Debuggerkonfiguration, um einen Debugger in Intellij zu verbinden.
Die Docker Compose -Konfiguration startet auch den Jenkins -Agenten automatisch im 'Debug' -Modus, dh es hört Remote -Debug -Anfragen an. Fügen Sie einen Remote -Debugger bei localhost:8001 (am Docker -Container an denselben Port zugeordnet) dem Debug -Code, der auf dem Agenten ausgeführt wird. Verwenden Sie die bereitgestellte Jenkins Agent (Remote Debugger) -Debug -Konfiguration, um einen Debugger in Intellij zu verbinden.
UI -Tests können mit den entsprechenden Launcher UI Tests [module] (Firefox) oder UI Tests [module] (Chrome) gestartet werden. Beachten Sie, dass beide Launcher eine Installation der entsprechenden Selen -Treiber benötigen. Wenn diese Treiber nicht in /opt/bin auf Ihrem lokalen Computer installiert sind, müssen Sie die Launcher -Konfigurationen an Ihr Setup anpassen.
Alle UI -Tests erfordern das Durchführen innerhalb eines bestimmten zu testenden Probanden (dh Jenkins untersucht, JUT). Weitere Informationen finden Sie unter dem Projekt "Acceptance Test Kabeless".
Diese Entwicklungsumgebung enthält eine individuelle Jenkins -Installation, in der Sie Ihre geänderten Plugins bereitstellen können, sodass Sie Ihre Änderungen direkt in einigen vorkonfigurierten Jobs sehen können, die diese Plugins verwenden.
Starten Sie den bereitgestellten Jenkins-Controller in diesem Projekt (Sie müssen Docker und Docker-Compose installieren). Öffnen Sie ein Terminal und laufen Sie ./jenkins.sh im Ordner oberster Ebene. Dieser Befehl ist ein Wrapper zum docker-compose up : Er verwendet die richtigen Benutzer- und Gruppeneinstellungen, damit die Berechtigungen des Docker-Volumens für den Ordner Home Home korrekt eingestellt sind. Dieser Befehl erstellt einen Docker -Container für den Jenkins -Controller und einen für den Java -Agenten. Dies erfordert einige Zeit, wenn die Docker -Bilder zum ersten Mal aufgerufen werden. Nachdem die Bilder erstellt wurden, werden die folgenden zwei Container gestartet:
Sie können dann Jenkins in der URL http: // localhost: 8080/öffnen. Verwenden Sie die folgenden Anmeldeinformationen, um sich als Administrator anzumelden:
Das Heimverzeichnis des Jenkins Controllers (Jenkins_Home) ist als Docker -Volumen montiert. Dh es ist auf dem Host als normales Verzeichnis bei ./docker/volumes/jenkins-controller sichtbar. Es wird Sitzungen überleben und kann direkt auf dem Host geändert werden. Weitere Informationen finden Sie in den offiziellen Dokumentationen. Dies hilft bei der Überprüfung der Dateien, die vom Jenkins Controller erstellt wurden.
Aufgrund eines Leistungsproblems in Jenkins 'Job DSL Plugin ist es sehr langsam, die neue Jenkins -Instanz einzurichten. Daher ist es sinnvoll, den Konfigurationsteil Ihrer jenkins.yaml -Datei zu entfernen, nachdem die Jobs erstellt wurden. Sie können den Inhalt der Datei in Ihrer neu erstellten Jenkins ./docker/volumes/jenkins-home/jenkins.yaml Instanz mit dem Inhalt in jenkins-no-jobs.yaml überschreiben.
Bände unter macos sind ziemlich langsam. Auf meinem MacBook ist der bereitgestellte Jenkins-Job des analysis-model im Docker-Container langsamer als denselben Jenkins-Job in einem Docker-Container auszuführen, der in einer linux virtuellen Maschine auf demselben MacBook ausgeführt wird (klingt irgendwie absurd?).
Sobald Sie Ihre lokalen Entwicklungsänderungen beendet haben (dh die Unit -Tests sind alle grün), sollten Sie Ihre Änderungen in Jenkins testen. Dies hilft auch bei der Erstellung eines Integrationstests oder UI -Tests für Ihre Änderung.
Wenn Sie nur Änderungen im analysis-model haben (und Sie keine neuen API-Methoden hinzugefügt haben), müssen Sie das Maven- analysis-model.jar wieder aufbauen und installieren und danach das zugehörige Jenkins-Wrapper-Plugin analysis-model-api-plugin wieder aufbauen. Dieses Plugin muss dann bei Jenkins bereitgestellt werden.
Dieser Vorgang wird durch Ausführen des Skripts ./bin/go.sh im analysis-model Modul vereinfacht. Das Modul analysis-model.jar wird in Ihrem lokalen Maven-Repository installiert. Dann erstellt dieses Skript das eigentliche Plugin und bereitet es für Jenkins bereit.
Wenn Sie nur Änderungen im Warn-NG-Plugin haben, müssen Sie die Jenkins-Plugin- warnings-ng.jpi umstellen und sie für Jenkins bereitstellen. Für diese Aufgabe können Sie eines der folgenden Shell -Skripte verwenden:
./bin/clean.sh : Erstellt das Plugin mit mvn clean install und bereitet es für den Erfolg in der Jenkins -Instanz ein../bin/go.sh : Erstellt das Plugin mit mvn clean install -DskipITs (überspringt die Integrationstests) und bereitet es für den Erfolg in den Jenkins Instace ein../bin/skip.sh : Erstellt das Plugin mit mvn clean install -DskipTests (überspringt alle Tests und statische Analysen) und bereitet es beim Erfolg in der Jenkins -Instanz ein.Todo
Wenn Sie Änderungen in einem der Voraussetzungs -Plugins (API- oder GIT -Implementierung) haben, müssen Sie diese Jenkins -Plugins neu aufbauen und in der Jenkins -Instanz bereitstellen.
Um diesen Prozess zu vereinfachen, werden Sie das Skript ./go.sh im entsprechenden Plugin -Ordner ausführen. Erstellt das Plugin und bereitet es für den Erfolg für Jenkins bereit.
Bevor Sie Breaking -Änderungen vornehmen, setzen Sie sich bitte mit mir in Verbindung. Normalerweise ist es möglich, Änderungen rückwärtskompatibel vorzunehmen.
Die Build-Skripte aus dem letzten Abschnitt können auch mit einem der Intellij-Launcher Build and Deploy [module-name] . Diese Launcher erstellen das entsprechende Plugin und stellen es in Jenkins ein.
UI -Tests können mit einer Intellij -Launcher -Konfiguration oder einem Befehlszeilenskript gestartet werden. Wie bereits erwähnt, müssen alle UI -Tests innerhalb eines bestimmten zu testenden Probanden ausgeführt werden. In unserem Fall verwenden wir die neueste verfügbare Jenkins LTS -Version und den vordefinierten Plugins -Satz von unserem Docker -Image.
UI -Tests können mit den entsprechenden Launcher UI Tests Warnings (Firefox) oder UI Warnings Tests (Chrome) begonnen werden. Beachten Sie, dass beide Launcher eine Installation der entsprechenden Selen -Treiber benötigen. Wenn diese Treiber nicht in /opt/bin auf Ihrem lokalen Computer installiert sind, müssen Sie die Launcher -Konfigurationen an Ihr Setup anpassen.
Sie können die UI -Tests auch mit dem bereitgestellten Shell Scrips testFirefox.sh oder testChrome.sh starten. Beachten Sie, dass Sie möglicherweise auch diese Skripte anpassen müssen (siehe vorheriger Abschnitt).