Bewegen Sie zuerst die Maus über den grauen Bereich darunter. Nicht Teil der Antwort, muss aber unbedingt gesagt werden:
Wenn Sie ein Shell-Skript haben, das "Auschecken, Erstellen, Bereitstellen" von selbst ausführt, warum verwenden Sie dann Jenkins? Sie verzichten auf alle Funktionen von Jenkins, die es zu dem machen, was es ist. Sie können das Skript auch direkt von einem Cron oder einem SVN-Post-Commit-Hook direkt aufrufen lassen. Jenkins, der die SVN-Prüfung selbst durchführt, ist von entscheidender Bedeutung. Es ermöglicht, dass die Builds nur ausgelöst werden, wenn Änderungen vorgenommen werden (oder auf Timer oder manuell, wenn Sie dies bevorzugen). Es verfolgt Änderungen zwischen Builds. Es zeigt diese Änderungen an, sodass Sie sehen können, welcher Build für welche Änderungen verwendet wurde. Es sendet Committer per E-Mail, wenn ihre Änderungen zu einem erfolgreichen oder fehlgeschlagenen Build geführt haben (wieder so konfiguriert, wie Sie es bevorzugen). Committer werden per E-Mail benachrichtigt, wenn ihre Fixes den fehlerhaften Build behoben haben. Und immer mehr. Jenkins, der die Artefakte archiviert, stellt sie auch pro Build direkt von Jenkins zur Verfügung. Dies ist zwar nicht so wichtig wie die SVN-Kaufabwicklung, aber es ist wieder ein wesentlicher Bestandteil dessen, was es zu Jenkins macht. Gleiches gilt für die Bereitstellung. Sofern Sie nicht über eine einzige Umgebung verfügen, erfolgt die Bereitstellung normalerweise in mehreren Umgebungen. Jenkins kann mithilfe von Promotions verfolgen, in welcher Umgebung ein bestimmter Build (mit bestimmten SVN-Änderungen) bereitgestellt wird. Sie verzichten auf all das. Es hört sich so an, als würde Ihnen gesagt, "Sie müssen Jenkins verwenden", aber Sie wollen es nicht wirklich, und Sie tun es nur, um Ihre Chefs von Ihrem Rücken zu bekommen, nur um ein Häkchen zu setzen: "Ja, ich habe Jenkins verwendet".
Die kurze Antwort lautet: Der Exit-Code des letzten Befehls des Build-Schritts Execute Shell von Jenkin bestimmt den Erfolg / Misserfolg des Build- Schritts . 0
- Erfolg, anything else
- Misserfolg. Beachten Sie, dass dies den Erfolg / Misserfolg des Erstellungsschritts bestimmt , nicht den gesamten Joblauf . Der Erfolg / Misserfolg des gesamten Joblaufs kann ferner durch mehrere Erstellungsschritte sowie Aktionen und Plugins nach dem Erstellen beeinflusst werden.
Sie haben es erwähnt Build step 'Execute shell' marked build as failure
, daher konzentrieren wir uns nur auf einen einzelnen Build-Schritt. Wenn Ihr Shell- Build-Schritt " Ausführen" nur eine einzige Zeile enthält, die Ihr Shell-Skript aufruft, bestimmt der Exit-Code Ihres Shell-Skripts den Erfolg / Misserfolg des Build-Schritts. Wenn Sie nach der Ausführung Ihres Shell-Skripts mehr Zeilen haben, überprüfen Sie diese sorgfältig, da diese Fehler verursachen können.
Lesen Sie zum Schluss hier, dass Jenkins Build Script nach der Ausführung von Google Test beendet wird . Es hängt nicht direkt mit Ihrer Frage zusammen, aber beachten Sie den Teil über Jenkins, der den Build-Schritt " Shell ausführen" als Shell-Skript mit startet/bin/sh -xe
Die -e
bedeutet , dass der Shell - Skript wird verlassen mit dem Scheitern, wenn auch nur einen Befehl fehlschlägt, auch wenn Sie für diesen Befehl Fehlerüberprüfung zu tun (weil das Script beendet , bevor es wird auf Ihre Fehlerprüfung). Dies steht im Gegensatz zur normalen Ausführung von Shell-Skripten, die normalerweise die Fehlermeldung für den fehlgeschlagenen Befehl drucken (oder auf null umleiten und auf andere Weise verarbeiten) und fortfahren.
Um dies zu umgehen, fügen Sie set +e
oben in Ihrem Shell-Skript hinzu.
Da Sie sagen, dass Ihr Skript alles tut, was es tun soll, befindet sich der fehlgeschlagene Befehl wahrscheinlich irgendwo am Ende des Skripts. Vielleicht ein letztes Echo? Oder irgendwo eine Kopie von Artefakten? Ohne die vollständige Konsolenausgabe zu sehen, raten wir nur.
Bitte posten Sie die Konsolenausgabe des Joblaufs und vorzugsweise auch das Shell-Skript selbst. Dann können wir Ihnen genau sagen, welche Zeile fehlschlägt.