Как я узнаю, какая стадия трубопровода Дженкинса провалилась - PullRequest
0 голосов
/ 18 мая 2018

В моих конвейерах Jenkins я обычно использую декларативную функцию post, чтобы отправлять мне электронные письма в случае сбоя конвейера.

Простой синтаксис функции post выглядит следующим образом:

post {
    failure {
        mail to: 'team@example.com',
             subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
             body: "Something is wrong with ${env.BUILD_URL}"
    }
}

В приведенном выше письме я также хочу упомянуть, какой этап (скажем, в конвейере от 5 до 6 этапов)) трубопровода не удалось.Как я могу это сделать?Любая помощь очень ценится.

Расширением вышеупомянутого требования будет предоставление пользователю фактического журнала ошибок (этапа, который не прошел) также как часть электронного письма с уведомлением об ошибке.

Идея состоит в том, что когда пользователь получает уведомление о сбое от jenkins, он должен знать, на каком этапе конвейера произошел сбой, вместе с журналом ошибок.

Заранее спасибо.

1 Ответ

0 голосов
/ 18 мая 2018

Существует переменная с именем env.STAGE_NAME, которую вы можете использовать.Однако в вашем случае вам, вероятно, нужно будет сохранить имя этапа в другой переменной, потому что, когда вы получите env.STAGE_NAME на этапе post, результат будет Declarative: Post Actions.Вместо этого вам нужно будет хранить имя этапа в переменной на всех этапах.Поэтому, если этап не пройден - Дженкинс не будет переходить к следующим этапам, и поэтому у вас будет «сбойное» имя этапа.

Вот пример:

def FAILED_STAGE

pipeline {
    agent { label "master" }
    stages {
        stage("Stage 1") {
            steps {
                script {
                    FAILED_STAGE=env.STAGE_NAME
                    echo "stage 1"
                }
            }
        }
        stage("Stage 2") {
            steps {
                script {
                    FAILED_STAGE=env.STAGE_NAME
                    echo "stage 2"
                    error "failed for some reason."
                }
            }
        }
        stage("Stage 3") {
            steps {
                script {
                    FAILED_STAGE=env.STAGE_NAME
                    echo "stage 3"
                }
            }
        }
    }
    post {
        failure {
            echo "Failed stage name: ${FAILED_STAGE}"
        }
    }
}

Возможно, лучшеспособ сделать это, но я пока не нашел.

Относительно журналов - Начиная с JENKINS-40526 вы могли бы использовать API и получить оттуда файл журнала,но я не уверен, что вы можете получить нужные параметры из конвейера.Другим решением будет использование emailext и отправка по электронной почте всего файла журнала сборки:

emailext attachLog: true, body: '', compressLog: true, subject: 'Build failed.', to: 'somebody@somewhere.com'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...