jenkins-pipeline - 带有自定义变量的 Jenkins 电子邮件模板(groovy)始终打印在电子邮件中
问题描述
我们将插件email-ext
与Jenkins-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
期望是该行不存在于电子邮件中。我们做错了什么?有什么建议么?
解决方案
一旦我发现 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 中未定义完整行或值为空时,不会在电子邮件中打印完整行。
推荐阅读
- jenkins - 如果某些步骤失败,Jenkins 管道将阶段标记为不稳定
- php - Laravel 使用 Request 对象重定向到控制器操作
- java - JavaFX 打包:NoClassDefFoundError
- java - 从 Spring 4 中的另一个 xml 文件访问 xml 中定义的 bean
- javascript - JSON 嵌套元素未定义
- android - Fused Location Provider Client 无法在 android studio 中解析
- docker - 如何在 Kubernetes 中使用现有的 Docker 镜像?
- r - 由于 nlsModel 中的错误,for 循环中的 nls 停止
- sql - Sql Developer - 使用 concat 和 GROUP BY 函数进行计数(错误 ORA-00904)
- unity3d - 10 秒后 Unity 多人游戏中的玩家生成