Wenn Sie ein Projekt im freien Stil verwenden, können Sie festlegen, dass der Build nach 20 Minuten abgebrochen wird, wenn er nicht abgeschlossen wird. Wie ist dies mit einem Jenkins Multi Branch Pipeline-Projekt möglich?
quelle
Wenn Sie ein Projekt im freien Stil verwenden, können Sie festlegen, dass der Build nach 20 Minuten abgebrochen wird, wenn er nicht abgeschlossen wird. Wie ist dies mit einem Jenkins Multi Branch Pipeline-Projekt möglich?
Sie können den Timeout- Schritt verwenden:
timeout(20) {
node {
sh 'foo'
}
}
Wenn Sie eine andere TimeUnit
als MINUTES benötigen , können Sie das folgende unit
Argument angeben :
timeout(time: 20, unit: 'SECONDS') {
EDIT Aug 2018: Heutzutage können mit den allgemeineren deklarativen Pipelines (die vom pipeline
Konstrukt der obersten Ebene leicht erkannt werden ) Zeitüberschreitungen auch options
auf verschiedenen Ebenen (pro Gesamtpipeline oder pro Stufe) angegeben werden:
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Wenn Sie jedoch eine Zeitüberschreitung auf einen einzelnen Schritt in einer deklarativen Pipeline anwenden möchten, können Sie diese wie oben beschrieben verwenden.
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Schrittreferenz .def n=Jenkins.instance.getNode("ETService3") if (n!=null && n.computer && n.computer.online) { echo "Online" } else { echo "Offline" // wait a little bit and try again }
Eine schwierige Möglichkeit besteht darin, den Knoten zweimal zu erwerben. Das erste Mal mit äußerem Timeout, das zweite Mal mit innerem Timeout. Mir fehlt auch die Funktion.Für eine deklarative Pipeline ist es ratsam , das verwenden Timeout Schritt im Option-Abschnitt .
Der Timeout-Schritt enthält 3 Parameter, die Sie konfigurieren können:
Zeit (erforderlich, int)
Aktivität (optional, boolesch)
Einheit (optional, Werte: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTEN, STUNDEN, TAGE)
Beispiele:
Die offizielle Jenkins-Dokumentation enthält ein sehr schönes Beispiel für die Verwendung einer Zeitüberschreitung:
quelle
activity
hat false als Standard. Wannactivity
ist falsch - Zeitüberschreitung für den gesamten Auftrag,true
Zeitüberschreitung für Aktivitäten (um etwas in das Protokoll zu drucken).timeout
für eine bestimmte Stufe so hinzufügen , dass die nachfolgende Stufe ordnungsgemäß abläuft. Im obigen Beispiel wird die Pipeline nach dem Timeout abgebrochen und nachfolgende Stufen werden nicht ausgeführt. Gibt es eine Möglichkeit, meine Anforderung zu erfüllen? Beispielcode für das Timeout einer bestimmten Phase (vom offiziellen Jenkins Doc):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }