Я бы предложил одно улучшение в ответе Майкла (это верно, кстати). Вы можете использовать catchError
, чтобы отметить этап ABORTED
(или UNSTABLE
) и пометить сборку SUCCESS
, но вам нужно обернуть код, который может прерваться, блоком try-catch
для контроля ошибки. Рассмотрим следующий пример:
pipeline {
agent any
stages {
stage('First') {
options {
timeout(time: 3, unit: 'SECONDS')
}
steps {
script {
catchError(buildResult: 'SUCCESS', stageResult: 'ABORTED') {
try {
echo "Executing stage I"
sleep 4
} catch(org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
error "Stage interrupted with ${e.toString()}"
}
}
}
}
}
stage('Second') {
steps {
script {
echo "Executing stage II"
}
}
}
}
}
Когда вы запускаете этот конвейер, стадия, для которой истекло время ожидания, помечается как ABORTED
, но конвейер продолжается, и если на оставшихся стадиях нет ошибок, он помечается как SUCCESS
.
А вот как выглядит статус UNSTABLE
.
Решение Майкла также работает, но оно дает немного другой результат - время ожидания помечается как SUCCESS
, и это может быть менее интуитивно понятно. Вы должны нажать на сцену, чтобы проверить, истекло ли это время или нет.
pipeline {
agent any
stages {
stage('First') {
options {
timeout(time: 3, unit: 'SECONDS')
}
steps {
script {
try {
echo "Executing stage I"
sleep 4
} catch(Exception e) {
currentBuild.result = "SUCCESS"
}
}
}
}
stage('Second') {
steps {
script {
echo "Executing stage II"
}
}
}
}
}