Lorsque vous utilisez un projet de style libre, vous pouvez définir qu'après 20 minutes, la génération est abandonnée si elle n'est pas terminée. Comment est-ce possible avec un projet de pipeline Jenkins Multi Branch?
Réponses:
Vous pouvez utiliser l' étape de temporisation :
timeout(20) {
node {
sh 'foo'
}
}
Si vous avez besoin d'un autre TimeUnit
que MINUTES , vous pouvez fournir l' unit
argument:
timeout(time: 20, unit: 'SECONDS') {
EDIT août 2018: De nos jours, avec les pipelines déclaratifs les plus courants (facilement reconnus par la pipeline
construction de niveau supérieur ), les délais d'expiration peuvent également être spécifiés à options
différents niveaux (par pipeline global ou par étape):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Néanmoins, si vous souhaitez appliquer un délai d'expiration à une seule étape d'un pipeline déclaratif, il peut être utilisé comme décrit ci-dessus.
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 }
Une manière délicate consiste à acquérir le nœud deux fois. La première fois avec timeout externe, la seconde avec timeout interne. Je manque aussi la fonctionnalité.
Pour un pipeline déclaratif, il est conseillé d'utiliser l' étape de temporisation dans la section des options .
Exécute le code à l'intérieur du bloc avec un délai d'expiration déterminé. Si la limite de temps est atteinte, une exception (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException) est levée, ce qui conduit à abandonner la construction (sauf si elle est interceptée et traitée d'une manière ou d'une autre). L'unité est facultative mais prend par défaut les minutes.
Le délai d'expiration a 3 paramètres que vous pouvez configurer:
time (obligatoire, int)
activité (facultatif, booléen)
unité (facultatif, valeurs: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
Exemples:
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')
La documentation officielle de Jenkins a un très bel exemple d'utilisation d'un timeout:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
a false par défaut. Quand activity
est faux - délai d'expiration pour l'ensemble du travail, true
délai d'expiration de l'activité (pour imprimer quoi que ce soit dans le journal).
timeout
pour une étape particulière de telle manière que l'étape suivante devrait se dérouler avec élégance. Dans l'exemple ci-dessus, le pipeline est abandonné après l'expiration du délai et les étapes suivantes ne sont pas exécutées. Existe-t-il un moyen de répondre à mes besoins? Exemple de code pour le timeout d'une étape donnée (du document officiel Jenkins):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Référence d'étape .