Reporting-shell-Skript-test Fehler im Jenkins-pipeline, ohne zu töten job
In einem Jenkins-Pipeline, was ist der empfohlene Weg für die Meldung shell-Skript-Fehler, dass der build instabil (d.h. Skripte, die einen test durchführen, aber nicht die restlichen tests beenden, wenn Fehler weiter)
Ideal, wir würden nicht Abbrechen, die bauen, wenn ein "test" - Skript schlägt fehl, aber über die Fehlermeldung am Ende. Dies könnte erreicht werden, durch das einwickeln von 'sh' - Schritte mit einem catch-block und Kennzeichnung der build als instabil. Jedoch, wenn wir eine einzelne pipeline, die alle diese Fehler-logs werden gemischt, in einer einzigen Konsole (ich begreife Sie können auch drill-down von der pipeline anzeigen, aber es würde erfordern, Jagd).
Gibt es eine empfohlene Weg, um diese Fehler zu melden? Ideen sind:
- speichern von Fehlern in einem array und drucken am Ende
- Erfassung der Ausgabe und schreiben Sie eine junit Datei
- eine Art von plugin, das einen Schritt zum aufzeichnen von Fehlern? Das würde mark den build als instabil, wenn alle gemeldet wurden?
z.B.
def errors = []
try {
sh "check-doc-style.sh | tee check-doc-style.log"
} catch (e)
errors << "Doc style check failed : ${e}"
}
step([$class: 'ArtifactArchiver', artifacts: 'check-doc-style.log'])
try {
sh "sanity-checks.sh | tee sanity-checks.log"
} catch (e)
errors << "Sanity checks failed : ${e}"
}
step([$class: 'ArtifactArchiver', artifacts: 'sanity-checks.log'])
if (errors.size() > 0) {
currentBuild.result = 'UNSTABLE'
for (int i = 0; i < errors.size(); i++) {
echo errors[i];
}
}
Kontext: Wir migrieren von einem Jenkins-setup, wo wir hatten ein Dutzend Aufträge pro Zweig zu einem einzigen Jenkine pipeline Jenkinsfile zu stellen, die ganze Sache. Viele Arbeitsplätze wurden Skript-tests, die entweder bestanden (exit code 0) oder nicht. Fehlermeldungen wurden angezeigt, indem man die Konsole protokolliert.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Exit-Code Handhabung
Shell
Als es geschrieben wird-Pipeline plugin nicht unterstützt Rückkehr der exit-code oder die Ausgabe von
sh
Schritt. Allerdings gibt es eine open -ticket, welche Spuren diese Funktion. Sotry /catch /finally
wäre der Standard-Weg zu handhaben solchen situation.Gibt es andere Ansätze, aber diese sind eher umständlich, dh. :
set +e
Maven
maven.test.failure.ignore
laufen alle tests, auch wenn einige gescheitert ist. DannJUnitResultArchiver
festlegen können, den build-status 'UNSTABLE'.Status-Reporting
Meiner Meinung nach, wenn Sie die tests der meisten sinnvollen Art und Weise zu verfolgen, die Ergebnisse zu analysieren, Sie mit
JUnitResultArchiver
.Allerdings, wenn auf der anderen Seite, die Sie erfassen möchten Warnungen und dann nach der Wichtigkeit ändern-Ergebnis-status, denken über die Verwendung einer Bühne oder auch die Schaffung widmete sich in einem, dh.
stage "report"
, wo die endgültigen Informationen werden konnte, deutlich sichtbar.Jenkins 2.0 enthält Stadium View-plug-in präsentiert Pipeline-workflow in einer klaren Art und Weise.
set +e
. Erstaunlich, das minus ermöglicht, und die plus-deaktiviert den "Fehler sind tödlich" einstellen.