Обработка ошибок Jenkins между скриптовым и декларативным конвейерами
Я хотел бы создать несколько декларативных конвейерных заданий из скриптового конвейера и обрабатывать любые сбои с помощью отдельных блоков try/catch, вложенных в родительский try/catch
node {
def err = false
try{
stage('build image') {
try {
//this job is a declarative pipeline
build job: 'build-docker-image'
} catch(e) {
echo "failure at build-docker-image"
throw e
}
}
stage('deploy image') {
try {
//this job is a declarative pipeline
build job: 'deploy-docker-image'
} catch(e) {
echo "failure at deploy-docker-image"
throw e
}
}
} catch(e) {
err = true
echo "caught error ${e}"
}
if(!err) {
echo "build and deploy ran successfully"
}
}
Этот код ведет себя противоречиво. Если задание на сборку завершается неудачно по синтаксическим причинам, дочерняя попытка перехватывает и пытается получить сообщение об ошибке, а затем отправляет его родителю, который также перехватывает его и выводит саму ошибку. Но если задание на сборку завершается неудачей по менее понятным причинам, т. Е. Изображение не скомпилировано правильно, родительский try/catch все равно обнаружит ошибку и будет вести себя так же, как и в предыдущем примере, но дочерний try/catch не отловит ошибку и не будет отображать сообщение об ошибке.
Почему расхождение? Существуют ли ошибки, вызванные неудачным декларативным конвейерным заданием, которое блок try/catch не может перехватить? Это плохая практика смешивать скриптовые и декларативные конвейеры? Буду признателен за любые советы или идеи по этому поводу. Спасибо