我们使用插件email-ext
与Jenkins-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
期望电子邮件中不存在此行。我们做错了什么?有什么建议?
一旦我发现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文件中定义或值为空,则不会在电子邮件中打印完整行。