webentwicklung-frage-antwort-db.com.de

Timeout bei einem Build-Schritt von Jenkins

Gibt es in Jenkins eine Möglichkeit, jedem oder ausgewählten Erstellungsschritt unterschiedliche Timeouts zu geben?
Das Build-Time-Plugin gibt die Funktionalität des Timeouts "Abbruch des Builds, wenn es steckenbleibt" für das vollständige Projekt an, was ich brauche, um unterschiedliche Timeouts für jeden Schritt zu geben. Auf diese Weise kann ich meinen Prozess effizienter gestalten.

26
rohits

Ab den aktuellen Versionen von Jenkins ist dies möglich. Klicken Sie auf "Konfigurieren", wählen Sie die Registerkarte "Build-Umgebung" und legen Sie Ihr Timeout fest.

Hier ist ein Screenshot:  enter image description here

13
JESii

Es gibt keine solche Funktionalität, die mir bekannt ist. JENKINS-8900 fordert es an.

6
Jesse Glick

Ich denke, der Befehl timeout von GNU coreutils könnte der sein, was Sie wollen. Dies setzt voraus, dass Ihre Buildschritte Skripts sind.

3
Ian

In Pipeline-Jobs können Sie Ihre Schritte mit timeout wie folgt umschließen:

timeout(time: 5, unit: 'MINUTES') { // steps to execute }

3
katrash

Der einfachste Weg (und das ist die Art und Weise, wie ich das mache) besteht darin, unterschiedliche Projekte zu haben, die voneinander abhängig sind, und diese hintereinander aufzubauen. Es ist nicht perfekt, aber die andere Option wäre die Überwachung der Ausführung verschiedener Plugins mit unterschiedlichen Tools/Build-Verhalten. 

Trotzdem wird der Ansatz funktionieren, obwohl er nicht scheiße ist ...

Übrigens, es gibt ein Nice-Plugin, das Sie mit einer Reihe von Project- Build Pipeline-Plugins unterstützen kann. Ich verwende es jetzt, um die von mir erstellte Pipeline zu visualisieren und zu überprüfen. Es ist wirklich praktisch ...

2
Łukasz Rżanek

Wenn Sie das Jenkins-Plugin nicht verwenden möchten und ein Skript oder einen anderen Befehl zeitlich abbrechen möchten, können Sie das in Linux integrierte Dienstprogramm "timeout" verwenden.

timeout -s KILL 1m ./test

Der obige Befehl wird test ausführbar für 1 Minute ausgeführt. Wenn er nach dem Timeout weiterhin ausgeführt wird, führt der Befehl ein Timeout aus und beendet den Prozess mit dem KILL-Dienstprogramm.

1
Hemant

Diese Frage wurde ursprünglich gestellt, bevor die Jenkins Pipeline existierte. Sie können Jenkins zwar weiterhin über die GUI verwenden und konfigurieren, es wird jedoch derzeit empfohlen, Ihre Projekte in die Pipeline zu übertragen. Mit der Pipeline können Sie Änderungen an Ihrer Pipeline nachverfolgen und als Code speichern. So können Sie Ihr Build auf jedem Computer leicht neu erstellen, wenn Sie den Jenkins-Server verschieben möchten.

Wenn Sie die Pipeline verwenden, ist das Hinzufügen eines Timeouts zu einem ganz bestimmten Teil Ihres Builds trivial. Die Pipeline-Syntax ist einfach und benutzerfreundlich.

timeout(time:5, unit:'DAYS') {
    input message:'Approve deployment?', submitter: 'it-ops'
}

Zugehörige Frage: So fügen Sie Jenkins Pipeline einen Timeout-Schritt hinzu

Beispiel schamlos entnommen aus: CloudBees Top 10 Best Practices für Jenkins Pipeline Plugin

0
Alex Lowe

Das Build-Timeout-Plugin ist nicht auf Pipelines anwendbar. verweisen auf wiki

Versuchen Sie zum Pipeline-Timeout Folgendes:

timeout(time: 30, unit: 'MINUTES') {
  node {
    sh 'foo'
  }
}

Ähnliche Antwort aus einem anderen Thread: So fügen Sie Jenkins Pipeline einen Timeout-Schritt hinzu

0
Chuan