Как в Jenkins настроить уведомление о неуспешной сборке (билде)?

«Как в Jenkins настроить уведомление о неуспешной сборке (билде)?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Jenkins я настраиваю уведомления о падении сборки через Declarative Pipeline, используя блок post с условием failure. Вот как это выглядит на практике для уведомления в Slack и отправки email.

1. Базовый пример для Slack (используя плагин Slack Notification):

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                // Шаги сборки...
                sh 'make build'
            }
        }
    }
    post {
        failure {
            // Отправка в Slack-канал
            slackSend(
                channel: '#jenkins-alerts',
                color: 'danger',
                message: "FAILED: Job '${env.JOB_NAME}' (Build #${env.BUILD_NUMBER})n" +
                         "Ссылка: ${env.BUILD_URL}n" +
                         "Причина: Проверьте консольный вывод"
            )
            // Отправка email (требует настройки SMTP в Jenkins)
            emailext (
                subject: "[Jenkins FAILED] ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                body: "Сборка не удалась. Детали: ${env.BUILD_URL}",
                to: 'devops-team@mycompany.com',
                attachLog: true // Прикрепляет логи
            )
        }
    }
}

2. Ключевые шаги настройки:

  • Плагины: Необходимо установить Slack Notification и Email Extension через Manage Jenkins -> Plugins.
  • Интеграция Slack: В настройках Jenkins (Manage Jenkins -> Configure System) добавить Slack Workspace, указав Credential с токеном (Bot User OAuth Access Token) и имя канала по умолчанию.
  • Настройка Email: В тех же системных настройках указать SMTP-сервер, адрес отправителя и использовать Extended E-mail Notification.

3. Расширенная логика: В реальных пайплайнах я часто добавляю условие unstable и changed (сборка снова упала после успешной) для более точных алертов. Для критичных продакшен-пайплайнов интегрирую с PagerDuty или Opsgenie через их webhook-интерфейсы.