Jenkins邮件与通知配置 - 第一时间掌握构建状态

一、前言
构建完成了,但你不知道?部署失败了,但你没看到?这些问题都可以通过通知来解决。及时的通知是CI/CD流程中不可或缺的一环——它让你第一时间知道构建状态,快速响应问题。本文将介绍Jenkins中各种通知方式的配置。
二、邮件通知
邮件是最基础也是最通用的通知方式。
2.1 配置SMTP服务器
进入 Manage Jenkins → System,找到"Extended E-mail Notification"和"Email Notification"部分。
QQ邮箱配置示例:
SMTP服务器: smtp.qq.com
SMTP端口: 465 (SSL) 或 587 (TLS)
用户名: your-email@qq.com
密码: 你的QQ邮箱授权码(不是QQ密码!)
获取QQ邮箱授权码:
1. 登录QQ邮箱 → 设置 → 账户
2. 找到POP3/SMTP服务,点击开启
3. 按提示用手机发短信获取授权码
163邮箱配置:
SMTP服务器: smtp.163.com
SMTP端口: 465 (SSL)
用户名: your-email@163.com
密码: 163邮箱授权码
企业微信/钉钉邮箱:
SMTP服务器: smtp.exmail.qq.com
SMTP端口: 465 (SSL)
勾选"Test configuration by sending test e-mail",填入收件邮箱,点击Test测试是否配置成功。
2.2 Extended Email插件(推荐)
安装 Email Extension Plugin,功能比Jenkins自带的邮件通知强大很多。
在Pipeline中使用:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
post {
success {
emailext(
subject: "✅ 构建成功: ${JOB_NAME} #${BUILD_NUMBER}",
body: """
<h2>构建成功</h2>
<p>项目: ${JOB_NAME}</p>
<p>构建号: #${BUILD_NUMBER}</p>
<p>持续时间: ${currentBuild.durationString}</p>
<p><a href="${BUILD_URL}">查看构建详情</a></p>
""",
to: 'team@company.com',
mimeType: 'text/html'
)
}
failure {
emailext(
subject: "❌ 构建失败: ${JOB_NAME} #${BUILD_NUMBER}",
body: """
<h2>构建失败</h2>
<p>项目: ${JOB_NAME}</p>
<p>构建号: #${BUILD_NUMBER}</p>
<p>请尽快检查!</p>
<p><a href="${BUILD_URL}console">查看控制台日志</a></p>
""",
to: 'team@company.com',
mimeType: 'text/html'
)
}
}
}
2.3 邮件模板
可以创建自定义邮件模板,让通知更美观。在Jenkins Home目录下创建模板文件:
<!-- $JENKINS_HOME/email-templates/build-status.groovy -->
<html>
<body>
<table width="100%" cellpadding="10">
<tr>
<td style="background: <%= build.result == 'SUCCESS' ? '#4CAF50' : '#f44336' %>; color: white;">
<h2><%= build.result == 'SUCCESS' ? '✅ 构建成功' : '❌ 构建失败' %></h2>
</td>
</tr>
</table>
<table cellpadding="5">
<tr><td><b>项目</b></td><td>${project.name}</td></tr>
<tr><td><b>构建号</b></td><td>#${build.number}</td></tr>
<tr><td><b>分支</b></td><td>${env.BRANCH_NAME}</td></tr>
<tr><td><b>持续时间</b></td><td>${build.durationString}</td></tr>
<tr><td><b>触发者</b></td><td>${build.causes[0].shortDescription}</td></tr>
</table>
<p><a href="${build.url}">查看构建详情</a> |
<a href="${build.url}console">查看控制台日志</a></p>
</body>
</html>
三、钉钉通知
钉钉是国内最常用的企业通讯工具之一,Jenkins可以通过Webhook发送钉钉通知。
3.1 创建钉钉机器人
步骤:
- 1. 打开钉钉群 → 群设置 → 智能群助手 → 添加机器人 → 自定义
- 2. 机器人名称:Jenkins构建通知
- 3. 安全设置:选择"加签"方式,复制签名(SEC开头的字符串)
- 4. 复制Webhook URL
3.2 使用DingTalk插件
安装 DingTalk Plugin,然后配置:
进入 Manage Jenkins → System,找到"DingTalk"部分:
- 添加机器人,填写Webhook URL和签名
- 配置通知策略(何时发送通知)
在Pipeline中使用:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
post {
success {
dingtalk(
robot: 'jenkins-robot',
type: 'MARKDOWN',
title: '构建成功',
text: [
"### ✅ 构建成功",
"- 项目: ${JOB_NAME}",
"- 构建号: #${BUILD_NUMBER}",
"- 持续时间: ${currentBuild.durationString}",
"- [查看详情](${BUILD_URL})"
]
)
}
failure {
dingtalk(
robot: 'jenkins-robot',
type: 'MARKDOWN',
title: '构建失败',
text: [
"### ❌ 构建失败",
"- 项目: ${JOB_NAME}",
"- 构建号: #${BUILD_NUMBER}",
"- [查看日志](${BUILD_URL}console)"
],
atAll: false
)
}
}
}
3.3 手动发送钉钉消息
不安装插件,用Shell脚本直接发送:
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
post {
always {
script {
def status = currentBuild.currentResult == 'SUCCESS' ? '✅ 成功' : '❌ 失败'
def webhookUrl = 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN'
sh """
curl -s '${webhookUrl}' \\
-H 'Content-Type: application/json' \\
-d '{
"msgtype": "markdown",
"markdown": {
"title": "Jenkins构建通知",
"text": "### Jenkins构建${status}\\n\\n- 项目: ${JOB_NAME}\\n- 构建号: #${BUILD_NUMBER}\\n- [查看详情](${BUILD_URL})"
}
}'
"""
}
}
}
}
四、企业微信通知
和钉钉类似,企业微信也支持Webhook机器人。
4.1 创建企业微信机器人
- 1. 打开企业微信群 → 添加群机器人
- 2. 复制Webhook URL
4.2 发送企业微信通知
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'mvn clean package'
}
}
}
post {
always {
script {
def status = currentBuild.currentResult == 'SUCCESS' ? '✅ 成功' : '❌ 失败'
def webhookUrl = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY'
sh """
curl -s '${webhookUrl}' \\
-H 'Content-Type: application/json' \\
-d '{
"msgtype": "markdown",
"markdown": {
"content": "### Jenkins构建${status}\\n> 项目: ${JOB_NAME}\\n> 构建号: #${BUILD_NUMBER}\\n> [查看详情](${BUILD_URL})"
}
}'
"""
}
}
}
}
五、Slack通知
如果你的团队使用Slack,可以集成Slack通知。
安装 Slack Notification Plugin:
pipeline {
agent any
post {
success {
slackSend(
color: 'good',
message: "✅ 构建成功: ${JOB_NAME} #${BUILD_NUMBER} (${currentBuild.durationString})"
)
}
failure {
slackSend(
color: 'danger',
message: "❌ 构建失败: ${JOB_NAME} #${BUILD_NUMBER} - ${BUILD_URL}console"
)
}
}
}
六、飞书通知
飞书也支持Webhook机器人通知:
pipeline {
agent any
post {
always {
script {
def status = currentBuild.currentResult == 'SUCCESS' ? '✅ 成功' : '❌ 失败'
def color = currentBuild.currentResult == 'SUCCESS' ? 'green' : 'red'
def webhookUrl = 'https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_HOOK_ID'
sh """
curl -s -X POST '${webhookUrl}' \\
-H 'Content-Type: application/json' \\
-d '{
"msg_type": "interactive",
"card": {
"header": {
"title": {
"tag": "plain_text",
"content": "Jenkins构建通知"
},
"template": "${color}"
},
"elements": [
{
"tag": "div",
"text": {
"tag": "lark_md",
"content": "**状态**: ${status}\\n**项目**: ${JOB_NAME}\\n**构建号**: #${BUILD_NUMBER}\\n**持续时间**: ${currentBuild.durationString}"
}
},
{
"tag": "action",
"actions": [
{
"tag": "button",
"text": {
"tag": "plain_text",
"content": "查看详情"
},
"url": "${BUILD_URL}",
"type": "primary"
}
]
}
]
}
}'
"""
}
}
}
}
七、HTTP通知(通用方式)
如果你的通知系统不在上面列出的,可以用HTTP请求的方式发送通知:
pipeline {
agent any
post {
always {
script {
def payload = """
{
"project": "${JOB_NAME}",
"build_number": "${BUILD_NUMBER}",
"status": "${currentBuild.currentResult}",
"duration": "${currentBuild.durationString}",
"url": "${BUILD_URL}",
"branch": "${env.BRANCH_NAME ?: 'N/A'}"
}
"""
// 发送到自定义通知系统
sh "curl -s -X POST https://notify.company.com/jenkins \
-H 'Content-Type: application/json' \
-d '${payload}'"
}
}
}
}
八、构建状态徽章
可以在项目README中显示Jenkins构建状态徽章:
# Markdown格式

# 带分支参数

九、通知最佳实践
- 不要过度通知:每次构建都发通知会让团队疲劳,只在失败和首次成功时通知
- 通知包含关键信息:项目名、构建号、状态、持续时间、链接
- 失败通知要醒目:用红色标记、@相关人员
- 提供快速操作链接:直接链接到构建日志,方便排查
- 按团队分组通知:不同项目的通知发到不同的群
- 区分环境:生产部署失败的通知要更紧急
// 只在状态变化时通知
post {
changed {
script {
if (currentBuild.currentResult == 'SUCCESS') {
// 之前失败现在成功了
emailext subject: "🎉 构建恢复正常: ${JOB_NAME}",
body: "之前失败的构建现在成功了!",
to: 'team@company.com'
}
}
}
}
十、总结
本文详细介绍了Jenkins的各种通知方式:
- 邮件通知:最通用,Extended Email插件功能强大
- 钉钉通知:国内最常用,支持Markdown格式
- 企业微信通知:类似钉钉,Webhook方式
- Slack通知:海外团队首选
- 飞书通知:支持丰富的卡片消息
- 通用HTTP通知:适合自定义通知系统
- 构建徽章:在README中展示构建状态
选择适合你团队的通知方式,让CI/CD流程透明可控!







