1. 概述
Jenkins 是一个开源的自动化服务器,能够帮助我们简化各种操作流程。比如,我们可以使用 Jenkins 定期或在特定条件下下载、编译和运行代码。由于任务可能随时执行且结果不确定,Jenkins 提供了一套基于邮件的通知系统。
在本教程中,我们将介绍两种从 Jenkins 发送邮件通知的方式。当我们希望在流水线出现异常时立即收到通知时,这两种方式非常有用。
2. 环境搭建
我们先从搭建环境开始。为了方便起见,我们使用 Docker Compose 来完成部署:
- 启动一个运行 Jenkins Docker 镜像 的容器
- 使用 MailHog 容器来测试邮件发送功能
2.1. 配置 Docker Compose
创建一个 docker-compose.yaml
文件:
version: '3.7'
services:
mailhog:
image: mailhog/mailhog:v1.0.1
container_name: mailhog
networks:
- jenkins
ports:
- 1025:1025
- 8025:8025
jenkins:
image: jenkins/jenkins:2.361.1-lts-jdk11
container_name: jenkins
networks:
- jenkins
ports:
- 8080:8080
- 50000:50000
networks:
jenkins:
关键点说明:
- 两个容器使用相同的 Docker 网络,这样才能互相通信 ✅
- MailHog 使用 1025 端口作为 SMTP 服务器,8025 端口用于访问 Web 界面
- Jenkins 使用 8080 端口访问 Web UI
2.2. 启动容器
运行命令启动容器:
$ docker-compose up -d
访问地址:
- MailHog UI: http://localhost:8025/
- Jenkins UI: http://localhost:8080/
启动后 Jenkins 会加载服务,稍等片刻后进入设置界面:
- 输入管理员密码
- 安装推荐插件
- 创建用户(可选)
- 实例配置页面点击“保存并完成”
2.3. Jenkins 初始化配置
完成初始化后,我们就可以开始配置邮件功能了。
3. 内建邮件通知功能
Jenkins 提供了内置的邮件发送功能,由 Mailer 插件支持。
3.1. 基础配置
路径:Manage Jenkins → Configure System → E-mail Notification
配置项:
- SMTP server:
mailhog
- 高级设置中设置端口为
1025
✅ 勾选“Test configuration by sending test e-mail”并填写测试邮箱地址,点击“Test configuration”发送测试邮件。
确认 MailHog 收到邮件后,点击“Apply”保存配置。
3.2. 在任务中使用
我们创建一个名为 Email Test Job
的 Freestyle 项目,配置如下:
- 构建步骤:执行 Shell 命令
echo "Test job for sending emails."
- 构建后操作:添加 Email Notification,填写收件人邮箱
示例截图如下:
3.3. 测试邮件通知
执行构建后,Jenkins 不会发送邮件,因为默认只在以下情况触发:
- 构建失败
- 构建不稳定
- 构建恢复稳定
修改脚本为:
echo "Test job for sending emails."
exit 1
再次执行构建,确认 Jenkins 构建失败并收到邮件通知:
- 邮件主题:Build failed in Jenkins: Email Test Job #2
恢复脚本并再次运行,会收到构建恢复正常的通知。
4. Email Extension 插件
除了内置方案,我们还可以使用 Email Extension Plugin,它支持更多触发事件。
4.1. 插件配置
路径:Manage Jenkins → Configure System → Extended E-mail Notification
配置 SMTP 参数:
- SMTP server:
mailhog
- Port:
1025
⚠️ 该插件不支持直接测试邮件发送,需通过任务验证。
4.2. 在任务中使用
修改之前的 Email Test Job
:
- 移除原有 Email Notification
- 添加新的构建后操作:Editable Email Notification
- 设置收件人
- 进入“Advanced Settings”设置触发器
默认触发器为构建失败时发送邮件,我们将其改为 Always
,表示每次构建都发送邮件。
示例截图如下:
再次运行任务,确认收到邮件。修改脚本为失败状态,再次运行确认收到失败邮件。
5. 发件人邮箱配置
虽然可以配置多个收件人,但发件人通常是 Jenkins 管理员邮箱。⚠️ Jenkins 默认不支持按任务设置不同发件人。
5.1. 全局设置
在 Jenkins 初始化过程中,我们可以设置管理员邮箱,用于:
- 接收通知邮件
- 作为系统邮件的发件人
如果初始化时未设置,后续可以在以下路径修改:
Manage Jenkins → Configure System → Jenkins Location → System Admin e-mail address
默认值可能是 address not configured yet <nobody@nowhere>
,需要手动修改。
5.2. 修改发件人
修改方法如下:
- 进入
Manage Jenkins
- 打开
Configure System
- 找到
Jenkins Location
- 修改
System Admin e-mail address
字段
格式应符合 RFC 5322 标准,例如:
Your Name <admin@example.com>
也可以使用 Groovy 脚本设置:
import jenkins.model.*
def jenkinsLocationConfiguration = JenkinsLocationConfiguration.get()
jenkinsLocationConfiguration.setAdminAddress("Your Name <admin@example.com>")
jenkinsLocationConfiguration.save()
设置完成后,Jenkins 发送的所有系统邮件都会使用新设置的邮箱地址。
6. 总结
本文介绍了两种从 Jenkins 发送邮件通知的方式:
- 内置邮件通知功能:适用于基本场景,如构建失败、恢复稳定时发送邮件
- Email Extension 插件:提供更丰富的触发事件和自定义选项,适合复杂需求
选择哪种方式取决于你的具体需求和使用习惯。两种方式都经过验证,可以稳定使用。如果你需要更灵活的控制,建议使用 Email Extension 插件。