Jenkins emailext插件变量插值失败问题咨询
解决Jenkins emailext插件变量混合插值问题
问题原因
- 使用三个单引号定义body时:Groovy会将其视为纯字符串,不解析任何
${}变量,因此自定义变量testResults无法被替换,但Jenkins内置变量(如BUILD_URL、BUILD_STATUS)由emailext插件自行解析,能正常生效。 - 使用三个双引号定义body时:Groovy会优先解析所有
${}变量,而BUILD_STATUS这类是Jenkins环境变量,并非Groovy脚本绑定的变量,因此抛出MissingPropertyException错误。
解决方案
方案1:转义Jenkins内置变量,保留自定义变量插值
在双引号字符串中,用反斜杠\转义Jenkins内置变量的${},让Groovy跳过解析,留给emailext插件处理;自定义变量testResults不转义,由Groovy完成插值:
emailext([ attachmentsPattern: '**/build/*.log', subject: 'Hello World', recipientProviders: [developers(), requestor()], to: '$DEFAULT_RECIPIENTS', body: """ <p>Test summary:</p> <ul> <li><a href=\"\${BUILD_URL}\">Status: \${BUILD_STATUS}</a></li> <li><a href=\"\${BUILD_URL}/flowGraphTable\">Executed steps</a></li> <li><a href=\"\${BUILD_URL}/parsed_console\">Errors and warnings</a></li> <li>Test results:</li> ${testResults} </ul> """, mimeType: 'text/html' ])
方案2:字符串拼接分离变量解析
用单引号保留Jenkins内置变量(让emailext解析),通过字符串拼接插入自定义Groovy变量testResults:
emailext([ attachmentsPattern: '**/build/*.log', subject: 'Hello World', recipientProviders: [developers(), requestor()], to: '$DEFAULT_RECIPIENTS', body: ''' <p>Test summary:</p> <ul> <li><a href="${BUILD_URL}">Status: ${BUILD_STATUS}</a></li> <li><a href="${BUILD_URL}/flowGraphTable">Executed steps</a></li> <li><a href="${BUILD_URL}/parsed_console">Errors and warnings</a></li> <li>Test results:</li> ''' + testResults + ''' </ul> ''', mimeType: 'text/html' ])
验证说明
两种方案都能实现:
- Jenkins内置变量
BUILD_URL、BUILD_STATUS由emailext插件正常解析 - 自定义变量
testResults由Groovy正确插值替换
内容的提问来源于stack exchange,提问作者tail
相关产品推荐
相关产品推荐

