Шаблон письма Jenkins (groovy) с пользовательской переменной всегда печатается в письме
Мы используем плагин email-ext
в комбинации с Jenkins-pipeline
для отправки писем (шаблон на основе Groovy). Дженкинс выполняет несколько заданий (все эти задания отправляют сообщения электронной почты при сбое), а для некоторых заданий необходима дополнительная информация в письме. Для нескольких заданий эта информация не нужна, и поэтому эта строка пользовательских переменных не должна присутствовать. В работах, где эта строка не нужна, мы не определили эту пользовательскую переменную.
С оператором if в шаблоне электронной почты Groovy мы обнаруживаем, что эта пользовательская переменная всегда присутствует в электронной почте.
<%
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"
В нашем случае эта строка печатается каждый раз, независимо от того, имеет ли значение пользовательская переменная или нет. Так что, если пользовательская переменная установлена, это выглядит так:
Custom variable: dummy_value
И если пользовательская переменная не установлена, она печатает:
Custom variable: null
Ожидается, что эта строка не присутствует в электронном письме. Что мы делаем не так? Какие-либо предложения?
1 ответ
Как только я узнал, что 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 или когда значение пусто.