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

问题描述 投票:0回答:1

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

通过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是否具有值,每次都会打印此行。所以f.e.如果设置了自定义var,它看起来像:

Custom variable: dummy_value

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

Custom variable: null

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

jenkins-pipeline email-ext jenkins-groovy
1个回答
0
投票

一旦我发现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>
<% } %>

使用此调整时,如果未在jenkins文件中定义或值为空,则不会在电子邮件中打印完整行。

© www.soinside.com 2019 - 2024. All rights reserved.