带有自定义变量的 Jenkins 电子邮件模板(时髦)始终打印在电子邮件中



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

通过时髦的电子邮件模板中的 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 中,这个自定义变量是为这样的定义(并且不存在于不需要的作业中(:

env.custom1 = "dummy_value"

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

Custom variable: dummy_value

如果未设置自定义变量,它将打印:

Custom variable: null

预期电子邮件中不存在此行。我们做错了什么?有什么建议吗?

一旦我发现 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 中未定义整行或值为空时,不会在电子邮件中打印整行。

最新更新