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.jellytest-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 标记是否正确闭合
最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟