我们将插件email-ext
与Jenkins-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 中未定义整行或值为空时,不会在电子邮件中打印整行。