1. 概述

Jenkins 是一个开源的自动化服务器,能够帮助我们简化各种操作流程。比如,我们可以使用 Jenkins 定期或在特定条件下下载、编译和运行代码。由于任务可能随时执行且结果不确定,Jenkins 提供了一套基于邮件的通知系统。

在本教程中,我们将介绍两种从 Jenkins 发送邮件通知的方式。当我们希望在流水线出现异常时立即收到通知时,这两种方式非常有用

2. 环境搭建

我们先从搭建环境开始。为了方便起见,我们使用 Docker Compose 来完成部署:

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

访问地址:

启动后 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,填写收件人邮箱

示例截图如下:

jenkins email test job configuration

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,表示每次构建都发送邮件。

示例截图如下:

jenkins email extension failure trigger

再次运行任务,确认收到邮件。修改脚本为失败状态,再次运行确认收到失败邮件。

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. 修改发件人

修改方法如下:

  1. 进入 Manage Jenkins
  2. 打开 Configure System
  3. 找到 Jenkins Location
  4. 修改 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 发送邮件通知的方式:

  1. 内置邮件通知功能:适用于基本场景,如构建失败、恢复稳定时发送邮件
  2. Email Extension 插件:提供更丰富的触发事件和自定义选项,适合复杂需求

选择哪种方式取决于你的具体需求和使用习惯。两种方式都经过验证,可以稳定使用。如果你需要更灵活的控制,建议使用 Email Extension 插件。


原始标题:Send Email Notification From Jenkins