【问题标题】:How to use Injected Environment Variables in Extended Email in Jenkins?如何在 Jenkins 的扩展电子邮件中使用注入的环境变量?
【发布时间】:2020-10-14 03:51:20
【问题描述】:

我有一个管道,我在构建阶段通过一个 groovy 文件以以下方式注入环境变量:

stage('Test-Mail') {
       agent {
              label 'master'
            }
             steps {
                 load '..\\..\\EnvVars.groovy'
                 script {
                   echo bat(returnStdout: true, script: 'set')
                 }
           }
    }

当我通过 echo 命令打印所有环境变量时,我能够看到所有默认变量以及成功注入的变量。

但是当我尝试在扩展电子邮件正文中的后期构建事件中使用它们时,我无法获得价值。我也尝试在后期构建中回显该值,并且我能够在那里获得该值。

我尝试了以下方式的扩展电子邮件:

post {
     always {
     bat ' echo BUILD_VERSION=%BUILD_VERSION%'
     emailext body: '''$PROJECT_NAME - $BUILD_DISPLAY_NAME -  ${BUILD_VERSION}  $BUILD_NUMBER - $BUILD_STATUS.
Follow the below links for details:
 Job URL: $JOB_URL
 Console Output : $BUILD_URL
                 
Regards,''', subject: 'Test Email Notification From Jenkins', to: 'vishalp@gmail.com'
                  
        }
    }

变量 BUILD_VERSION 是从 groovy 文件中注入的。

我试过了:

$BUILD_VERSION

${BUIILD_VERSOIN}

${env.BUILD_VERSION}

${ENV, var="BUILD_VERSION"}

但似乎没有任何效果。

我收到的邮件正文如下:

POCs » Mail-Notification-Pipeline - #34 -  ${BUILD_VERSION}  34 - Successful.

Follow the below links for details:
 Job URL: http://172.16.1.73:8080/job/POCs/job/Mail-Notification-Pipeline/
 Console Output : http://172.16.1.73:8080/job/POCs/job/Mail-Notification-Pipeline/34/

Regards,

我可以访问 Jenkins 提供的所有默认环境变量,但不能访问我注入的那些。 Jenkins 有不同类型的环境变量吗?我是否以错误的方式使用变量?

【问题讨论】:

    标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy jenkins-job-dsl


    【解决方案1】:

    尝试将单引号 ''' 更改为双引号 """。 根据Groovy documentation

    三单引号字符串是纯 java.lang.String,不支持插值。

    【讨论】:

    • 我按照你说的尝试了,现在我收到错误:Error when executing always post condition: groovy.lang.MissingPropertyException: No such property: PROJECT_NAME for class: WorkflowScript at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.getProperty(ScriptBytecodeAdapter.java:458)...
    • 如果 ''' 不支持插值,那么 $PORJECT_NAME$BUILD_NUMBER 等怎么能正常工作?
    • 该错误是由于 PROJECT_NAME 变量超出范围,因为它是在阶段内声明(加载)的,它在 post 块中不可见。根据''' 的问题有点奇怪,也许您可​​以分享工作/电子邮件输出?
    • PROJECT_NAME 是Jenkins默认提供的变量,我没有注入。我现在成功构建的电子邮件输出是:POCs » Mail-Notification-Pipeline - #34 - %BUILD_VERSION% 34 - 成功。请点击以下链接了解详细信息: 工作 URL:172.16.1.73:8080/job/POCs/job/Mail-Notification-Pipeline 控制台输出:172.16.1.73:8080/job/POCs/job/Mail-Notification-Pipeline/34 问候,
    • 你是对的,它们是 Jenkins 全局变量,为此道歉。也许您可以将这些 URL 的内容粘贴到问题中,例如更新?看起来我无法联系到他们。
    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 2014-03-11
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 2020-04-06
    • 1970-01-01
    相关资源
    最近更新 更多