Führen Sie das Shell-Skript nach dem Post-Build in Jenkins aus

80

Ich versuche, ein Shell-Skript auszuführen, wenn entweder der Build erfolgreich ist oder nach dem Post-Build in Jenkins fehlschlägt. Ich kann diese Option nach dem Erstellen nicht sehen, um ein Shell-Skript auszuführen, außer um ein Ziel auszuführen.

Top Gun
quelle

Antworten:

67

Sehr einfach mit dem Post Build Task Plugin.

Jenkins - Option "Post Build Task"

Daniel Magnusson
quelle
48
Ich würde stattdessen das PostBuildScript-Plugin empfehlen, um einfach ein Skript auszuführen . Es ist einfacher und robuster, wenn Sie die Protokollausgabe nicht konditionieren müssen. Beispielsweise können beliebige Erstellungsschritte in den Aktionen nach dem Erstellen ausgeführt werden.
Sampo
9
Beachten Sie auch, dass das Post Build Task-Plugin die gesamte Konsolenausgabe in den Speicher legt, um den bedingten Test durchzuführen. Dies kann viel Speicherplatz beanspruchen, wenn Hunderte von Jobs viel Ausgabe produzieren. Unser Jenkins-Master ist gerade abgestürzt zu diesem Plugin ...
Grayaii
1
Das PostBuildScript-Plugin wurde angehalten.
Upen
@Upen können Sie einen Link bereitstellen, der dies beweist?
Vadim Kotov
10

Sie können auch beliebige Befehle mit dem Groovy Post Build ausführen - und das gibt Ihnen viel Kontrolle darüber, wann sie ausgeführt werden und so weiter. Wir verwenden dies, um bei fehlgeschlagenen oder instabilen Builds ein "Finger of Blame" -Shell-Skript auszuführen.

if (manager.build.result.isWorseThan(hudson.model.Result.SUCCESS)) {
  item = hudson.model.Hudson.instance.getItem("PROJECTNAMEHERE")
  lastStableBuild = item.getLastStableBuild()
  lastStableDate = lastStableBuild.getTime()
  formattedLastStableDate = lastStableDate.format("MM/dd/yyyy h:mm:ss a")
  now = new Date()
  formattedNow = now.format("MM/dd/yyyy h:mm:ss a")
  command = ['/appframe/jenkins/appframework/fob.ksh', "${formattedLastStableDate}", "${formattedNow}"]
  manager.listener.logger.println "FOB Command: ${command}"
  manager.listener.logger.println command.execute().text
}

(Unser Befehl verwendet das letzte stabile Erstellungsdatum und die aktuelle Uhrzeit als Parameter, damit untersucht werden kann, wer den Build möglicherweise beschädigt hat. Sie können jedoch beliebige Befehle auf ähnliche Weise ausführen.)

Crover
quelle
6

Wenn ich Ihre Frage richtig lese, möchten Sie ein Skript im Post-Build-Aktionsteil des Builds ausführen.

Ich selbst verwende das PostBuildScript-Plugin zum Ausführen, git clean -fxdnachdem der Build Artefakte archiviert und Testergebnisse veröffentlicht hat. Meine Jenkins-Slaves verfügen über SSD-Festplatten, sodass der Raum keine generierten Dateien im Arbeitsbereich aufbewahrt.

sti
quelle
3

Sie sollten dies mit dem Batch Task-Plugin tun können .

  1. Erstellen Sie eine Batch-Aufgabe im Projekt.
  2. Fügen Sie nach dem Erstellen die Option "Stapelaufgaben aufrufen" hinzu, indem Sie dasselbe Projekt auswählen.

Eine Alternative kann auch das Post-Build-Task- Plugin sein.

Carlo Bonamico
quelle
1

Sie müssten das Post-Build-Shell-Skript als separaten Jenkins-Job einrichten und als Post-Build-Schritt auslösen. Es sieht so aus, als müssten Sie das Parametrisierte Trigger-Plugin verwenden, da die Standardoption "Andere Projekte erstellen" nur funktioniert, wenn Ihr Trigger-Build erfolgreich ist.

gareth_bowles
quelle
Wie kann ich das Skript auslösen, wenn der Build ausschließlich auf der Grundlage eines ausführbaren Shell-Skripts fehlschlägt, das ich unter meinen Jobaufgaben habe? Danke
Topgun
Wenn Sie darüber nachdenken, ist es möglicherweise einfacher, das Build-Skript selbst zu steuern. Welches Build-Framework verwenden Sie?
gareth_bowles