Skip to content

一、Jenkins Email Extension Template 插件使用手册 ​

1.1 插件简介 ​

Email Extension Template 插件(全称为 Email Extension Template Plugin)是 Jenkins 的一个强大扩展,用于增强 Jenkins 的邮件通知功能。该插件允许用户创建自定义的邮件模板,使用 Jelly 脚本或 Groovy 脚本来生成丰富的 HTML 邮件内容,包括构建状态、测试结果、代码覆盖率等信息。

  • 支持使用 Jelly 或 Groovy 脚本创建自定义邮件模板
  • 提供丰富的变量和函数,可访问构建信息、环境变量、测试结果等
  • 支持 HTML 格式邮件,可包含表格、图表、链接等富文本元素
  • 可根据构建结果(成功、失败、不稳定等)发送不同内容的邮件

1.2 插件安装 ​

TIP

该插件依赖于 Email Extension Plugin,如果尚未安装,系统会自动安装该依赖插件。

1.3 基础配置 ​

1.3.1 系统邮件配置 ​

在使用 Email Extension Template 插件之前,需要先配置 Jenkins 的邮件服务器:

  1. 进入 系统管理 -> 系统配置
  2. 找到 "Extended E-mail Notification" 部分
  3. 配置 SMTP 服务器信息:
    • SMTP 服务器地址
    • SMTP 端口(通常为465)
    • 如需认证,勾选 "使用SMTP认证" 并填写用户名和密码
    • 根据需要配置 SSL,TLS 选项
    • 配置邮箱后缀
    • 配置默认内容类型,选择 HTML (text/html)
  4. 设置默认收件人、默认主题【$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS!】、默认内容【$PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS: Check console output at $BUILD_URL to view the results.】
  5. 勾选 Allow sending to unregistered users 以允许未验证的收件人
  6. 点击 "保存" 按钮

1.4 在项目中配置邮件通知 ​

1.4.1 自由风格项目配置 ​

  1. 进入项目配置页面
  2. 配置 git 地址
  3. 配置Execute shell
  4. 在 "构建后操作" 部分,点击 "增加构建后操作步骤" 按钮
  5. 选择 "Editable Email Notification"
  6. 配置邮件通知选项:
    • 收件人列表
    • 邮件内容类型(HTML)
    • 选择使用默认内容或项目特定内容
  7. 点击 "保存" 按钮

构建成功

构建失败

1.4.2 Pipeline 项目配置 ​

在 Pipeline 脚本中使用 Email Extension Template 插件:

groovy

pipeline {
    agent { 
        node {
            label "master"
        }
    }

    stages {
        stage('CheckOut') {
            steps {
                script{
                    checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'a11aa99b-7bba-48fd-bd01-46b68732578a', url: 'http://code.srebro.cn/opforge/demo.git']])
                }
            }
        }

        stage('test') {
            steps {
                script{
                    sh '''
                    echo "test email"
                    '''
                }
            }
        }
    }
    post{
        always {
            script{
                EmailUser("${currentBuild.currentResult}")
            }
        }
    }
}


def EmailUser(STATUS){
        // 根据构建状态设置颜色
        def statusColor = STATUS == 'SUCCESS' ? '#0B610B' : '#FF0000'
        
        emailext body: """
            <!DOCTYPE html> 
            <html> 
            <head> 
            <meta charset="UTF-8"> 
            </head> 
            <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4" offset="0"> 


                <table width="95%" cellpadding="0" cellspacing="0" style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
                    <tr>
                    <td>(本邮件是Jenkins程序自动下发的,请勿回复!)</td>
                    </tr>
                    
                    <tr>
                    <td><h2><font color="${statusColor}">构建结果:"${STATUS}"</font></h2></td>
                    </tr>
                    
                    <tr>
                    <td><br />
                    <b><font color="#0B610B">构建信息:</font></b><hr size="2" width="100%" align="center" /></td>
                    </tr>
                    
                    <tr> 
                        <td> 
                            <ul> 
                                <li>项目名称:${JOB_NAME}</li>         
                                <li>构建编号:${BUILD_ID}</li> 
                                <li>构建状态: ${STATUS} </li> 
                                <li>项目地址:<a href="${BUILD_URL}">${BUILD_URL}</a></li>    
                                <li>构建日志:<a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                                <li>历史变更记录 : <a href="${BUILD_URL}changes">${BUILD_URL}changes</a></li>
                            </ul> 
                        </td> 
                    </tr> 
                    <tr>  
                </table> 
            </body> 
            </html>  """,
        recipientProviders: [buildUser(), developers()],
        subject: 'jenkins2.0 【构建通知】: Build # $BUILD_NUMBER - $BUILD_STATUS!',
        to: 'admin@srebro.cn'  //默认接收对象
}

构建成功

构建失败

1.5 高级功能 ​

1.5.1 使用预定义模板文件 ​

除了在 Jenkins 配置中直接编写模板外,还可以使用预定义的模板文件:

方法一: 将模板定义在Jenkins 页面中 Editable Email Notification Templates

  1. 进入 系统管理 -> Editable Email Notification Templates
  2. Add New Template , 创建新的模板文件

方法二: 将模板文件放在 Jenkins 配置目录的子目录中

  1. 在 Jenkins 主目录下创建 email-templates 目录
  2. 在该目录中创建模板文件,如 build-report.jelly 或 test-report.groovy
  3. 在项目配置中,指定模板文件路径:
    • 对于自由风格项目:在 "Editable Email Notification" 的高级选项中设置 "Content" 为 ${TEMPLATE, file="build-report.jelly"}
    • 对于 Pipeline 项目:使用 body: '${TEMPLATE, file="build-report.jelly"}'

其他方法:将模版定义在共享库中详情见后面共享库那块的项目实战介绍

1.5.2 条件触发邮件通知 ​

Email Extension Template 插件支持根据不同条件发送不同内容的邮件:

groovy
pipeline {
    agent any
    
    stages {
        // 构建阶段...
    }
    
    post {
        success {
            emailext (
                subject: "✅ 构建成功: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                body: '${TEMPLATE, file="success-template.html"}',
                to: 'team@example.com',
                mimeType: 'text/html'
            )
        }
        failure {
            emailext (
                subject: "❌ 构建失败: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                body: '${TEMPLATE, file="failure-template.html"}',
                to: 'team@example.com,manager@example.com',
                mimeType: 'text/html'
            )
        }
        unstable {
            emailext (
                subject: "⚠️ 构建不稳定: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
                body: '${TEMPLATE, file="unstable-template.html"}',
                to: 'team@example.com',
                mimeType: 'text/html'
            )
        }
    }
}

1.6 常见问题与解决方案 ​

1.6.1 邮件发送失败 ​

问题:配置了邮件通知但没有收到邮件

解决方案:

  • 检查 SMTP 服务器配置是否正确
  • 验证收件人地址是否有效
  • 查看 Jenkins 系统日志中的邮件发送错误信息
  • 尝试使用 "Test configuration" 按钮测试邮件发送

1.6.2 模板渲染错误 ​

问题:邮件内容显示错误或模板变量未被替换

解决方案:

  • 检查模板语法是否正确
  • 确保引用的变量在当前构建环境中存在
  • 使用 try-catch 块包装可能失败的代码部分
  • 在模板中添加调试信息,如打印变量值

1.6.3 HTML 内容显示为纯文本 ​

问题:HTML 格式的邮件内容显示为纯文本

解决方案:

  • 确保 "Content Type" 设置为 "text/html"
  • 检查邮件客户端是否支持 HTML 邮件
  • 验证 HTML 标记是否正确闭合
最近更新