Jenkins:将用户定义的变量传递给Email-Ext插件

时间:2020-05-28 19:25:33

标签: jenkins jenkins-pipeline jenkins-plugins email-ext jenkins-email-ext

我正在使用Email-Ext插件在声明式管道的后期构建阶段的构建结束时发送结果电子邮件。在电子邮件的正文中,我尝试插入一些环境变量和一些用户定义的环境变量。

内置变量显示得很好,但是我定义的任何用户定义变量在电子邮件正文中都为空,或者在attachmentPattern字段中也不起作用:

我的环境变量:

pipeline {
    agent any
    environment {
        buildFolder = "build_${BUILD_NUMBER}" 
        robotFolder = "build_${BUILD_NUMBER}/robotDemo" 
        serverName = "abc123"
        robotResults = "${buildFolder}/*.txt"
    }

我在帖子中使用的email-ext格式{}版本:

emailext attachLog: true, attachmentsPattern: 'build_${env.BUILD_NUMBER}/Robot_Results.txt', body: '<b>Job Name:</b> ${ENV, var="JOB_NAME"}<br><b>Build Number:</b> ${ENV, var="BUILD_NUMBER"}<br><br><b>Build URL:</b><br>${ENV, var="BUILD_URL"}<br><br><b>Log Files:<br><br><br><pre>${BUILD_LOG_EXCERPT, start="^====", end="^report.html"}</pre><pre>${ENV, var="serverName"}</pre>', mimeType: 'text/html', subject: 'ABS Results', to: 'richard.scott@sap.com'

例如:$ {ENV,var =“ JOB_NAME”},显示正常。但是$ {ENV,var =“ serverName”}根本不显示。

我尝试过诸如...

$ {serverName}
$ {env.serverName}

...但是它们也不起作用。

有什么想法如何在email-ext插件中使用用户定义的环境变量,例如上面的“ serverName”?

Richard和问候,

1 个答案:

答案 0 :(得分:0)

您使用的是单引号,但只有双引号允许对变量进行插值。

我建议您使用Groovy脚本来呈现电子邮件内容。

您可以像这样使用predefined Groovy script

emailext body: '''${SCRIPT, template="groovy-html.template"}'''

或添加自己的模板like described in the documentation。我无法弄清楚是否可以从工作空间中加载该模板,但是您可以尝试以下操作:

emailext body: '''${SCRIPT, template="$WORKSPACE/groovy-html.template"}'''

用于内插时从环境或参数获取值的语法为:

${env.MY_ENVVAR}
${param.MY_BUILDPARAM}

(env和param是ja Groovy映射,包含所有值)

对于所有其他变量:

${varName}