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 TimeUnitque MINUTES , vous pouvez fournir l' unitargument:
timeout(time: 20, unit: 'SECONDS') {
EDIT août 2018: De nos jours, avec les pipelines déclaratifs les plus courants (facilement reconnus par la pipelineconstruction de niveau supérieur ), les délais d'expiration peuvent également être spécifiés à optionsdiffé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'
}
}
}
}
activitya false par défaut. Quand activityest faux - délai d'expiration pour l'ensemble du travail, truedélai d'expiration de l'activité (pour imprimer quoi que ce soit dans le journal).
timeoutpour 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 .