Ich habe einen Job, der Dateien erstellt, es sei denn, einer der eingegebenen Werte stimmt mit einem älteren Wert überein. Was ist der sauberste Weg in Jenkins, um den Job abzubrechen oder zu beenden, ohne dass dies der Fall ist FAILED
? Das Beenden ist das richtige Verhalten, daher möchte ich, dass der Build markiert wird SUCCESS
.
Es wird in einer if-Anweisung wie folgt enden;
stage ('Check value') {
if( $VALUE1 == $VALUE2 ) {
//if they do match exit as a success, else continue with the rest of the job
}
}
Ich möchte keinen Fehlercode ausgeben, es sei denn, dies kann irgendwie dazu führen, dass ein erfolgreicher Build markiert wird.
exit 0
...return 0
, alles in allem sollte das Ende des Groovy-Codes, der keine Ausnahme auslöst, meiner Meinung nach stimmen. Ich lasse jemanden mit mehr Hintergrundwissen über Jenkins 2 bestätigen oderAntworten:
Herausgefunden. Außerhalb einer Phase (andernfalls wird die jeweilige Phase nur als Erfolg gewertet), gehen Sie wie folgt vor:
return
stoppt die Bühne oder den Knoten, auf dem Sie gerade laufen , weshalb das Ausführen außerhalb einer Bühne wichtig ist, während das FestlegencurrentBuild.result
verhindert, dass sie ausfällt.quelle
Sie können auch Fehler verwenden, um die aktuelle Phase zu verlassen. Sie müssen dann nicht die aktuelle Phasenhierarchie und ähnliches berücksichtigen:
Dies würde aber zu einer roten Stufe führen, wenn der Fehler innerhalb einer Stufe auftritt.
Es hängt von Ihren Anforderungen ab, welchen Weg Sie verwenden möchten.
quelle
RuntimeException
werfen, anstatt alle Ausnahmen abfangen zu müssen und überprüfe eine FlaggeEhrlich gesagt sollten Sie den Befehl exit nicht speziell verwenden müssen, aber es gibt ein Conditional BuildStep-Plugin, das möglicherweise dasselbe Endergebnis erzielt (Code, der nicht ausgeführt wird).
Darauf bin ich noch nicht gekommen, also habe ich das Plugin nicht benutzt.
Es gibt auch Bedingungen, wie sie in diesem früheren Stapelüberlauf-Post auf Jenkins: Jenkins Pipeline Conditional Step / Stage zu finden sind
quelle
exit
Befehl verwenden" - wenn ich mich entschuldige, ist das mein Missverständnis.Die
Executor.interrupt(Result)
Methode ist die sauberste und direkteste Methode, die ich finden konnte, um einen Build vorzeitig zu stoppen und als Erfolg zu markieren.Vorteile :
Nachteile :
quelle