Обработка ошибок 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 не может перехватить? Это плохая практика смешивать скриптовые и декларативные конвейеры? Буду признателен за любые советы или идеи по этому поводу. Спасибо

0 ответов

Другие вопросы по тегам