Antworten:
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.
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 .
Führt den Code innerhalb des Blocks mit einem festgelegten Zeitlimit aus. Wenn das Zeitlimit erreicht ist, wird eine Ausnahme (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) ausgelöst, die zum Abbruch des Builds führt (es sei denn, er wird abgefangen und irgendwie verarbeitet). Das Gerät ist optional, standardmäßig jedoch Minuten.
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:
timeout(time: 10) // would lead to a timeout of 10 minutes (MINUTES is default value)
timeout(time: 10, unit: 'SECONDS') // a 10 seconds timeout
timeout(time: 10, activity: false, unit: 'MILLISECONDS')
Die offizielle Jenkins-Dokumentation enthält ein sehr schönes Beispiel für die Verwendung einer Zeitüberschreitung:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
hat false als Standard. Wann activity
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' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Schrittreferenz .