Как я могу поймать любую ошибку конвейера в Jenkins?

У меня есть сценарий конвейера Jenkins, который по большей части работает нормально, и я окружаю большинство вещей, которые вызовут фатальную ошибку, с помощью try catch. Однако время от времени случаются действительно неожиданные вещи, и я хотел бы иметь безопасный доступ ко всему, чтобы сделать некоторые окончательные отчеты перед сбоем сборки.

Нет ли окончательного «этапа» по умолчанию, который я могу определить, который запускается всякий раз, когда ошибка не обнаружена?


person S.Richmond    schedule 29.12.2016    source источник
comment
вы можете завернуть его в try {} finally {}   -  person Rik    schedule 03.01.2017


Ответы (2)


Вы можете сделать это, обернув все этапы сборки в большой блок try/catch/finally {}, например:

node('yournode') {
    try {
        stage('stage1') {
            // build steps here...
        }
        stage('stage2') {
            // ....
        }
    } catch (e) {
        // error handling, if needed
        // throw the exception to jenkins
        throw e
    } finally {
        // some common final reporting in all cases (success or failure)
    }
}
person Mohamed O. Abdallah    schedule 04.01.2017
comment
Будет ли это решение работать для декларативного подхода? - person Kanagavelu Sugumar; 21.11.2019
comment
@KanagaveluSugumar для декларативного конвейера, я считаю, что приведенный ниже ответ ipper является правильным решением - person Mohamed O. Abdallah; 26.11.2019

Хотя уже был дан ответ для скриптового конвейера, я хотел бы указать, что для декларативного конвейера это делается с помощью раздел сообщений:

pipeline {
    agent any
    stages {
        stage('No-op') {
            steps {
                sh 'ls'
            }
        }
    }
    post {
        always {
            echo 'One way or another, I have finished'
            deleteDir() /* clean up our workspace */
        }
        success {
            echo 'I succeeeded!'
        }
        unstable {
            echo 'I am unstable :/'
        }
        failure {
            echo 'I failed :('
        }
        changed {
            echo 'Things were different before...'
        }
    }
}

Каждый этап также может иметь свой собственный раздел, если это необходимо.

person ipper    schedule 10.11.2017
comment
Выполняется ли пост-этап, если тайм-аут истек? - person Siddharth; 31.03.2020