You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins脚本化流水线:如何通过变量设置邮件模板内容?

解决Jenkins脚本化流水线emailext模板变量解析问题

你遇到的问题主要来自变量作用域限制、拼写错误,再加上Groovy字符串插值与emailext模板语法的冲突,导致变量无法被正确解析。下面一步步帮你解决:

1. 先纠正变量作用域与拼写错误

你原来的代码里,email_body是在if/else块内用def定义的,这会让变量的作用域只限于块内,外面的emailext根本访问不到它,自然没法解析。另外buildResult == 'SUCESSS'是拼写错误,应该是SUCCESS(少了一个C),这会导致逻辑永远走else分支,你可能一直没注意到这个问题。

先修正这部分代码:

// 提前声明变量,让作用域覆盖后续的emailext调用
def email_body

if (buildResult == 'SUCCESS') { // 纠正拼写:SUCESSS → SUCCESS
    email_body = "TEST_SUCCESS.template"
} else {
    email_body = "TEST_FAILURES.template"
}

2. 正确拼接模板路径到emailext的body参数

emailext的${SCRIPT,template=...}是它自身的模板调用语法,我们需要让Groovy先把email_body的变量值替换进去,再传给emailext。推荐两种可靠的写法:

写法一:单引号字符串拼接

这种方式最直观,完全避免Groovy和emailext的语法冲突:

emailext( 
    subject: "Job '${env.JOB_NAME} [${env.BUILD_NUMBER}] finished", 
    body: '${SCRIPT,template=' + email_body + '}', // 用字符串拼接注入变量值
    recipientProviders: [[$class: 'DevelopersRecipientProvider']], 
    to: 'XXXX', 
    from: 'YYYY', 
    replyTo: 'ZZZZ', 
    mimeType: 'text/html', 
)

写法二:双引号转义Groovy插值

如果习惯用双引号字符串,需要转义${SCRIPT}中的$,让Groovy只解析${email_body}部分:

emailext( 
    subject: "Job '${env.JOB_NAME} [${env.BUILD_NUMBER}] finished", 
    body: "\${SCRIPT,template=${email_body}}", // 转义$避免Groovy解析SCRIPT部分
    recipientProviders: [[$class: 'DevelopersRecipientProvider']], 
    to: 'XXXX', 
    from: 'YYYY', 
    replyTo: 'ZZZZ', 
    mimeType: 'text/html', 
)

3. 额外验证要点

最后确认你的模板文件TEST_SUCCESS.template和TEST_FAILURES.template确实存在于Jenkins服务器的$JENKINS_HOME/email-templates目录下,注意文件名的大小写(Linux系统是区分大小写的)。

这样修改后,emailext就能正确识别模板变量,根据测试结果发送对应内容的邮件了。

内容的提问来源于stack exchange,提问作者user2738748

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:56:26