Как в Jenkins сделать нотификацию об неуспешном билде
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Настройка нотификаций о неуспешном сборках в Jenkins
В Jenkins существует несколько эффективных подходов для настройки уведомлений о неуспешных сборках (failed builds). Рассмотрим основные методы, от базовых до продвинутых.
1. Email уведомления через встроенный плагин
Самый распространенный способ — использование плагина Email Extension. Вот пошаговая настройка:
Глобальная конфигурация (Manage Jenkins → Configure System):
SMTP сервер: smtp.gmail.com (или корпоративный SMTP)
Порт: 587 (с TLS)
Имя пользователя: ваш-email@gmail.com
Пароль: пароль приложения
Использовать SSL: ✓
Настройка в Jenkinsfile (Declarative Pipeline):
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make build'
}
}
stage('Test') {
steps {
sh 'make test'
}
}
}
post {
failure {
emailext(
subject: "СБОРКА ПРОВАЛЕНА: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
body: """
Проверьте сборку: ${env.BUILD_URL}
Детали:
- Проект: ${env.JOB_NAME}
- Номер сборки: ${env.BUILD_NUMBER}
- Причина: ${currentBuild.currentResult}
""",
to: 'team@company.com',
attachLog: true
)
}
success {
emailext(
subject: "Сборка успешна: ${env.JOB_NAME} - ${env.BUILD_NUMBER}",
to: 'team@company.com'
)
}
}
}
2. Интеграция с мессенджерами через плагины
Для Slack:
post {
failure {
slackSend(
channel: '#build-failures',
color: 'danger',
message: "❌ Сборка ${env.JOB_NAME} #${env.BUILD_NUMBER} провалена\nСсылка: ${env.BUILD_URL}"
)
}
unstable {
slackSend(
channel: '#build-failures',
color: 'warning',
message: "⚠️ Сборка ${env.JOB_NAME} нестабильна"
)
}
}
Для Telegram (используя Telegram Bot API):
post {
failure {
sh '''
curl -s -X POST "https://api.telegram.org/bot<YOUR_BOT_TOKEN>/sendMessage" \
-d chat_id=<CHAT_ID> \
-d text="🚨 Сборка ${JOB_NAME} #${BUILD_NUMBER} провалена! Проверьте: ${BUILD_URL}"
'''
}
}
3. Использование условных шагов и триггеров
Для сложных сценариев можно использовать conditional buildstep plugin:
steps {
// Основные шаги сборки
sh './build.sh'
}
post {
always {
// Всегда выполняем анализ результатов
script {
if (currentBuild.result == 'FAILURE') {
// Дополнительная логика для проваленных сборок
archiveArtifacts artifacts: 'logs/**/*.log', allowEmptyArchive: true
// Отправка в несколько систем одновременно
slackSend(channel: '#alerts', message: "Сборка провалена")
emailext(to: 'oncall-engineer@company.com', subject: 'СРОЧНО: Провал сборки в продакшене')
// Запуск диагностического скрипта
sh './run-diagnostics.sh'
}
}
}
}
4. Вебхуки для внешних систем мониторинга
Настройка через Generic Webhook Trigger plugin:
triggers {
GenericTrigger(
genericVariables: [
[key: 'build_status', value: '\\$.build.status'],
[key: 'project_name', value: '\\$.project.name']
],
postContentParameters: [
[name: 'BUILD_RESULT', value: currentBuild.result]
],
token: 'SECRET_TOKEN',
causeString: 'Triggered by monitoring system'
)
}
5. Кастомизированные обработчики через Shared Libraries
Для enterprise-решений создаем переиспользуемую библиотеку:
vars/notifyBuildFailure.groovy в Shared Library:
def call(Map config = [:]) {
def defaultConfig = [
channels: ['email', 'slack'],
teams: ['devops', 'backend'],
priority: 'high'
]
config = defaultConfig + config
echo "Отправка уведомлений о проваленной сборке: ${env.JOB_NAME}"
if (config.channels.contains('email')) {
sendEmailNotification(config)
}
if (config.channels.contains('slack')) {
sendSlackNotification(config)
}
if (config.priority == 'critical') {
triggerPagerDutyIncident()
}
}
private void sendEmailNotification(config) {
// Логика отправки email
}
private void sendSlackNotification(config) {
// Логика отправки в Slack
}
Использование в Jenkinsfile:
@Library('notification-lib') _
pipeline {
post {
failure {
notifyBuildFailure(
channels: ['slack', 'msteams'],
priority: 'critical',
teams: ['devops', 'platform']
)
}
}
}
Рекомендации по настройке:
- Ступенчатые уведомления: Первый провал → разработчикам, повторные провалы → тимлидам, критические провалы → DevOps/OnCall
- Информативность сообщений: Всегда включайте ссылку на сборку, номер сборки, имя джобы и контекстную информацию
- Отложенные уведомления: Используйте
waitUntilдля transient-ошибок, чтобы избежать ложных срабатываний - Интеграция с тикет-системами: Автоматическое создание JIRA/ServiceNow тикетов при проваленных сборках
- Мониторинг эффективности: Отслеживайте MTTR (Mean Time To Recovery) для проваленных сборок
Диагностика проблем:
# Проверка почтовых настроек через Groovy Console
import jenkins.model.*
def mailer = Jenkins.instance.getDescriptorByType(hudson.tasks.Mailer.DescriptorImpl)
println "SMTP сервер: ${mailer.smtpServer}"
println "SMTP порт: ${mailer.smtpPort}"
# Просмотр логов отправки
tail -f $JENKINS_HOME/logs/mail.log
Правильная настройка нотификаций существенно сокращает время реакции на проблемы и улучшает процесс CI/CD, обеспечивая прозрачность и оперативность обработки инцидентов.