GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Jenkins-Build nicht fehlschlagen, wenn die Ausführungsshell fehlschlägt

Um die weitere Ausführung zu stoppen, wenn Befehl schlägt fehl:

command || exit 0

Um die Ausführung fortzusetzen, wenn Befehl schlägt fehl:

command || true


Jenkins führt Shell-Build-Schritte mit /bin/sh -xe aus standardmäßig. -x bedeutet, jeden ausgeführten Befehl zu drucken. -e bedeutet, mit einem Fehler zu beenden, wenn einer der Befehle im Skript fehlgeschlagen ist.

Ich denke also, was in Ihrem Fall passiert ist, ist Ihr Git-Befehl exit mit 1 und wegen des Standardwerts -e param übernimmt die Shell den Exit-Code ungleich 0, ignoriert den Rest des Skripts und markiert den Schritt als Fehler. Wir können dies bestätigen, wenn Sie Ihr Build-Step-Skript hier posten können.

Wenn das der Fall ist, können Sie versuchen, #!/bin/sh einzugeben damit das Skript ohne Option ausgeführt wird; oder machen Sie einen set +e oder irgendetwas Ähnliches zusätzlich zum Erstellungsschritt, um dieses Verhalten zu überschreiben.

Bearbeitet:Eine weitere zu beachtende Sache ist, dass, wenn der letzte Befehl in Ihrem Shell-Skript gibt Nicht-0-Code zurück , wird der gesamte Build-Schritt auch bei diesem Setup weiterhin als fehlgeschlagen markiert. In diesem Fall können Sie einfach einen true eingeben Befehl am Ende, um das zu vermeiden.

Eine andere verwandte Frage


Wenn es nichts zu pushen gibt, gibt git den Exit-Status 1 zurück. Shell-Build-Schritt ausführen wird entsprechend als fehlgeschlagen markiert. Sie können die ODER-Anweisung || verwenden (Doppelrohr).

git commit -m 'some messasge' || echo 'Commit failed. There is probably nothing to commit.'

Das heißt, zweites Argument ausführen, wenn das erste fehlgeschlagen ist (zurückgegebener Exit-Status> 0). Der zweite Befehl gibt immer 0 zurück. Wenn es nichts zu pushen gibt (Status 1 beenden -> zweiten Befehl ausführen), gibt Echo 0 zurück und der Bauschritt wird fortgesetzt.

Um den Build als instabil zu markieren, können Sie den Post-Build-Schritt Jenkins Text Finder verwenden. Es kann die Konsolenausgabe durchlaufen, das Muster (Ihr Echo) abgleichen und den Build als instabil markieren.


Linux
  1. Echte Systemadministratoren verwenden kein Sudo

  2. Befehl im aktiven Remote-Terminal ausführen?

  3. chsh-Befehlsbeispiele in Linux

  4. Shell-Befehl in Jenkins als Root-Benutzer ausführen?

  5. Warum ruft popen() eine Shell auf, um einen Prozess auszuführen?

Quellbefehl unter Linux

So führen Sie einen Shell-Befehl mit Python aus

So führen Sie Shell-Befehle über einen HTTP-Server aus

Kommando-Shell

Quellbefehl unter Linux erklärt

Wie führe ich einen Befehl in einem Shell-Skript aus?