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
相关产品推荐
相关产品推荐

