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.

Schreibe einen Kommentar