| When a declarative timeout call is fired inside of a retry, retry is not being triggered and job execution is aborted, the only way to make it work is by surrounding the timeout operation with a try/catch. without try/catch Log output
Cancelling nested steps due to timeout
Execution result
Timeout has been exceeded
Finished: ABORTED
with try/catch Log output
Timeout set to expire after 2 sec without activity
Sleeping for 2 sec
Cancelling nested steps due to timeout
ERROR: catched timeout! org.jenkinsci.plugins.workflow.steps.FlowInterruptedException
Retrying
Execution result
Examples to reproduce the issue Failing example
node {
def timeoutSeconds = 3
stage('Preparation') { // for display purposes
retry(3){
timeout(activity: true, time: 2, unit: 'SECONDS') {
sleep(timeoutSeconds)
}
timeoutSeconds--
}
}
}
Working example
node {
def timeoutSeconds = 3
stage('Preparation') { // for display purposes
retry(3){
try{
timeout(activity: true, time: 2, unit: 'SECONDS') {
sleep(timeoutSeconds)
}
}catch(err){
timeoutSeconds--
script{
def user = err.getCauses()[0].getUser()
error "[${user}] catched timeout! $err"
}
}
}
}
}
|