首页 > 解决方案 > 带有自定义变量的 Jenkins 电子邮件模板(groovy)始终打印在电子邮件中

问题描述

我们将插件email-extJenkins-pipeline发送电子邮件(基于 groovy 的模板)结合使用。Jenkins 运行多个作业(所有这些作业都在失败时发送电子邮件),并且对于某些作业,电子邮件中需要额外的信息。对于一些作业,此信息是不必要的,因此不应存在此自定义变量行。在不需要此行的作业中,我们没有定义此自定义变量。

通过 groovy 电子邮件模板中的 if 语句,我们发现此自定义变量始终存在于电子邮件中。

<%
def envOverrides = it.getAction('org.jenkinsci.plugins.workflow.cps.EnvActionImpl').getOverriddenEnvironment()
if (${envOverrides["custom1"]} != null) { %>
<tr>
    <td><b>Custom variable:</b></td>
    <td>${envOverrides["custom1"]}</td>
</tr>
<% } %>

在 jenkinsfile 中,这个自定义 var 是为这样的一些定义的(并且在不需要的作业中不存在):

env.custom1 = "dummy_value"

在我们的例子中,无论自定义变量是否有值,每次都会打印这一行。因此,如果设置了自定义 var,它看起来像:

Custom variable: dummy_value

如果设置自定义 var,则会打印:

Custom variable: null

期望是该行不存在于电子邮件中。我们做错了什么?有什么建议么?

标签: jenkins-pipelineemail-extjenkins-groovy

解决方案


一旦我发现 envOverrides 返回一个地图,解决方案很快:

<%
def envOverrides = it.getAction('org.jenkinsci.plugins.workflow.cps.EnvActionImpl').getOverriddenEnvironment()
if (envOverrides.containsKey('custom1') && "${envOverrides['custom1']} != '') { %>
<tr>
    <td><b>Custom variable:</b></td>
    <td>${envOverrides['custom1']}</td>
</tr>
<% } %>

通过此调整,当 jenkinsfile 中未定义完整行或值为空时,不会在电子邮件中打印完整行。


推荐阅读