Quando si utilizza un progetto in stile libero è possibile impostare che dopo 20 minuti la compilazione venga interrotta se non conclusa. Com'è possibile con un progetto di pipeline Jenkins Multi Branch?
Risposte:
Puoi utilizzare il passaggio del timeout :
timeout(20) {
node {
sh 'foo'
}
}
Se hai bisogno di un diverso TimeUnit
da MINUTES , puoi fornire l' unit
argomento:
timeout(time: 20, unit: 'SECONDS') {
EDIT Agosto 2018: al giorno d'oggi con le pipeline dichiarative più comuni (facilmente riconoscibili dal pipeline
costrutto di primo livello ), i timeout possono anche essere specificati utilizzando options
su diversi livelli (per pipeline complessiva o per fase):
pipeline {
options {
timeout(time: 1, unit: 'HOURS')
}
stages { .. }
// ..
}
Tuttavia, se si desidera applicare un timeout a un singolo passaggio in una pipeline dichiarativa, è possibile utilizzarlo come descritto sopra.
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 }
Un modo complicato è acquisire il nodo due volte. La prima volta con timeout esterno, la seconda con timeout interno. Mi manca anche la funzionalità.
Per una pipeline dichiarativa si consiglia di utilizzare la fase di timeout nella sezione delle opzioni .
Esegue il codice all'interno del blocco con un limite di timeout determinato. Se viene raggiunto il limite di tempo, viene generata un'eccezione (org.jenkinsci.plugins.workflow.steps.FlowInterructedException), che porta all'interruzione della compilazione (a meno che non venga rilevata ed elaborata in qualche modo). L'unità è opzionale ma il valore predefinito è minuti.
La fase di timeout ha 3 parametri che puoi configurare:
time (richiesto, int)
attività (opzionale, booleano)
unità (facoltativo, valori: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS)
Esempi:
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 documentazione ufficiale di Jenkins ha un esempio molto carino per l'uso di un timeout:
pipeline {
agent any
options {
timeout(time: 1, unit: 'HOURS')
}
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
}
activity
ha false come impostazione predefinita. Quando activity
è falso: timeout per l'intero lavoro, per il true
timeout per l'attività (per stampare qualsiasi cosa nel registro).
timeout
per una fase particolare in modo tale che la fase successiva dovrebbe essere eseguita con garbo. Nell'esempio precedente, la pipeline viene interrotta dopo il timeout e le fasi successive non vengono eseguite. C'è un modo per soddisfare la mia richiesta? Codice di esempio per il timeout di una determinata fase (da Jenkins Doc ufficiale):pipeline { agent any stages { stage('Example') { options { timeout(time: 1, unit: 'HOURS') } steps { echo 'Hello World' } } } }
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax/
→ Riferimento passaggio .