In einem Projekt, an dem ich arbeite, verwenden wir Shell-Skripte, um verschiedene Aufgaben auszuführen. Einige sind sh / bash-Skripte, die rsync ausführen, andere sind PHP-Skripte. Eines der PHP-Skripte führt einige Integrationstests aus, die in JUnit XML, Code Coverage-Berichten und ähnlichem ausgegeben werden.
Jenkins kann die Jobs basierend auf dem Exit-Status als erfolgreich / fehlgeschlagen markieren . In PHP wird das Skript mit 1 beendet, wenn festgestellt wurde, dass die Tests während des Laufs fehlgeschlagen sind. Die anderen Shell-Skripte führen Befehle aus und verwenden die Exit-Codes von diesen, um einen Build als fehlgeschlagen zu markieren.
// :: End of PHP script:
// If any tests have failed, fail the build
if ($build_error) exit(1);
In der Jenkins-Terminologie wird ein instabiler Build wie folgt definiert:
Ein Build ist instabil, wenn er erfolgreich erstellt wurde und ein oder mehrere Publisher ihn als instabil melden. Wenn beispielsweise der JUnit-Publisher konfiguriert ist und ein Test fehlschlägt, wird der Build als instabil markiert.
Wie kann ich Jenkins dazu bringen, einen Build als instabil zu markieren, anstatt nur Erfolg / Misserfolg beim Ausführen von Shell-Skripten?
Antworten:
Verwenden Sie das Text-Finder- Plugin.
Anstatt mit Status 1 zu beenden (was den Build fehlschlagen würde), gehen Sie wie folgt vor:
Aktivieren Sie dann in den Post-Build-Aktionen den Text Finder, stellen Sie den regulären Ausdruck so ein, dass er mit der von Ihnen gedruckten Nachricht übereinstimmt (
TESTS FAILED!
), und aktivieren Sie das Kontrollkästchen "Instabil, wenn gefunden" unter diesem Eintrag.quelle
Moderne Jenkins-Versionen (seit 2.26, Oktober 2016) haben dieses Problem gelöst: Es ist nur eine erweiterte Option für den Schritt zum Ausführen der Shell-Erstellung!
Sie können einfach einen beliebigen Exit-Wert auswählen und festlegen. Wenn es übereinstimmt, ist der Build instabil. Wählen Sie einfach einen Wert aus, der wahrscheinlich nicht durch einen realen Prozess in Ihrem Build ausgelöst wird.
quelle
sh
Befehl step in a verwendet wirdJenkinsfile
? Wo befindet sich die Einstellung in der GUI? Ich kann es nicht finden.Dies kann ohne Drucken von magischen Zeichenfolgen und mit TextFinder erfolgen. Hier sind einige Informationen dazu.
Grundsätzlich benötigen Sie eine .jar-Datei von http: // yourserver.com / cli, die in Shell-Skripten verfügbar ist. Dann können Sie den folgenden Befehl verwenden, um einen Build als instabil zu markieren:
Um Build bei Fehler als instabil zu markieren, können Sie Folgendes verwenden:
Das Problem ist, dass jenkins-cli.jar über das Shell-Skript verfügbar sein muss. Sie können es entweder in einen leicht zugänglichen Pfad einfügen oder über das Shell-Skript des Jobs herunterladen:
quelle
set-build-result
in derjenkins-cli
.Sie sollten Jenkinsfile verwenden, um Ihr Build-Skript zu verpacken, und den aktuellen Build einfach mit UNSTABLE markieren
currentBuild.result = "UNSTABLE"
.quelle
UNSTABLE
)? Es scheint einfacher als die anderen Antworten.Expected one of "steps", "stages", or "parallel" for stage
Wenn ich versuche, currentBuild.result direkt in einer Phase festzulegen.Sie sollten auch in der Lage sein, groovy zu verwenden und das zu tun, was der Textfinder getan hat
Markieren eines Builds als instabil mit einem groovigen Post-Build-Plugin
Siehe auch Groovy Postbuild Plugin
quelle
In meinem Jobskript habe ich die folgenden Anweisungen (dieser Job wird nur auf dem Jenkins-Master ausgeführt):
Sie können dies und viele weitere Informationen zum Festlegen des Build-Status im Jenkins-Wiki sehen: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI
quelle
Konfigurieren Sie den PHP-Build so, dass ein XML-Junit-Bericht erstellt wird
Beenden Sie das Build-Skript mit dem Status 0
Aktion nach dem Erstellen hinzufügen JUnit-Testergebnisbericht für XML-Testberichte veröffentlichen. Dieses Plugin ändert Stable Build in Unstable, wenn der Test fehlschlägt.
Fügen Sie das Jenkins Text Finder- Plugin mit dem Scannen der Konsolenausgabe und deaktivierten Optionen hinzu. Dieses Plugin schlägt aufgrund eines schwerwiegenden Fehlers fehl.
quelle
Ich finde den flexibelsten Weg, dies zu tun, indem ich eine Datei im groovigen Post-Build-Plugin lese.
Wenn der Dateiinhalt 'true' ist, wird der Build auf instabil gesetzt. Dies funktioniert auf dem lokalen Master und auf allen Slaves, auf denen Sie den Job ausführen, sowie auf allen Arten von Skripten, die auf die Festplatte schreiben können.
quelle
Der TextFinder ist nur dann gut, wenn der Auftragsstatus nicht von SUCCESS in FAILED oder ABORTED geändert wurde. Verwenden Sie in solchen Fällen ein grooviges Skript im PostBuild-Schritt:
Weitere Details finden Sie in einem Beitrag, den ich darüber geschrieben habe: http://www.tikalk.com/devops/JenkinsJobStatusChange/
quelle
Ich habe meine Antwort von hier aus dupliziert , weil ich einige Zeit damit verbracht habe, danach zu suchen:
Dies ist jetzt in neueren Versionen von Jenkins möglich. Sie können Folgendes tun:
Der Pipeline-Syntaxgenerator zeigt Ihnen dies auf der Registerkarte "Erweitert":
quelle
Ich dachte, ich würde eine andere Antwort für Leute posten, die nach etwas Ähnlichem suchen könnten.
In unserem Build-Job haben wir Fälle, in denen wir möchten, dass der Build fortgesetzt wird, aber als instabil markiert werden. Bei uns handelt es sich um Versionsnummern.
Daher wollte ich eine Bedingung für den Build festlegen und den Build auf instabil setzen, wenn diese Bedingung erfüllt ist.
Ich habe die Option Bedingter Schritt (einzeln) als Erstellungsschritt verwendet.
Dann habe ich Execute System Groovy Script als Build-Schritt verwendet, der ausgeführt wird, wenn diese Bedingung erfüllt ist.
Ich habe Groovy Command verwendet und das Skript wie folgt eingestellt
Das scheint ganz gut zu funktionieren.
Ich bin hier auf die Lösung gestoßen
http://tech.akom.net/archives/112-Marking-Jenkins-build-UNSTABLE-from-environment-inject-groovy-script.html
quelle
Als leichtere Alternative zu den vorhandenen Antworten können Sie das Build-Ergebnis mit einem einfachen HTTP-POST festlegen, um auf die REST-API der Groovy-Skriptkonsole zuzugreifen :
Vorteile:
Für diese Lösung muss Ihre Umgebung die folgenden Bedingungen erfüllen:
quelle
Eine einfache Möglichkeit, einen Build als instabil festzulegen, besteht darin, in Ihrem Block "Shell ausführen" auszuführen
exit 13
quelle
Sie können einfach "exit 1" aufrufen, und der Build schlägt an diesem Punkt fehl und wird nicht fortgesetzt. Ich habe eine Passthrough-Make-Funktion erstellt, um sie für mich zu erledigen, und Safemake aufgerufen, anstatt Make für das Bauen:
quelle
if make "$@"; then echo "BUILD SUCCEEDED"; else rc=$?; echo "BUILD FAILED"; exit $rc; fi