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 TimeUnitda MINUTES , puoi fornire l' unitargomento:
timeout(time: 20, unit: 'SECONDS') {
EDIT Agosto 2018: al giorno d'oggi con le pipeline dichiarative più comuni (facilmente riconoscibili dal pipelinecostrutto di primo livello ), i timeout possono anche essere specificati utilizzando optionssu 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'
}
}
}
}
activityha false come impostazione predefinita. Quando activityè falso: timeout per l'intero lavoro, per il truetimeout per l'attività (per stampare qualsiasi cosa nel registro).
timeoutper 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 .