【问题标题】:CHANGE_AUTHOR_EMAIL and CHANGE_ID environment variables return "No such property: ..."CHANGE_AUTHOR_EMAIL 和 CHANGE_ID 环境变量返回“没有这样的属性:...”
【发布时间】:2017-07-29 14:27:26
【问题描述】:

鉴于以下管道:

stages {
    stage ("Checkout SCM") {
        steps {
            checkout scm

            sh "echo ${CHANGE_AUTHOR_EMAIL}"
            sh "echo ${CHANGE_ID}"
        }
    }
}

为什么这些变量无法解析并提供值?

最终我想使用这些环境变量来发送电子邮件并合并拉取请求:

post {
    failure {
        emailext (
        attachLog: true,
        subject: '[Jenkins] $PROJECT_NAME :: Build #$BUILD_NUMBER :: build failure',
        to: '$CHANGE_AUTHOR_EMAIL',
        replyTo: 'iadar@...',
        body: '''<p>You are receiving this email because your pull request was involved in a failed build. Check the attached log file, or the console output at: $BUILD_URL to view the build results.</p>'''
     )
    }
}

sh "curl -X PUT -d '{\'commit_title\': \'Merge pull request\'}'  <git url>/pulls/${CHANGE_ID}/merge?access_token=<token>"

奇怪的是,$PROJECT_NAME$BUILD_NUMBER$BUILD_URL 工作......


更新:这可能是一个开放的错误...https://issues.jenkins-ci.org/browse/JENKINS-40486 :-(
是否有任何解决方法来获取这些值?

【问题讨论】:

    标签: jenkins jenkins-pipeline


    【解决方案1】:

    您需要注意如何引用环境变量,具体取决于环境变量是 shell 还是 Groovy 代码,以及引用方式。

    当您执行sh "echo ${CHANGE_ID}" 时,实际发生的是Groovy 将首先插入字符串,通过将${CHANGE_ID} 替换为Groovy 属性CHANGE_ID,这就是您的错误消息的来源。在 Groovy 中,环境变量包装在 env 中。

    如果您想直接从您的 shell 脚本中引用环境变量,您必须使用 env 进行插值、使用单引号或转义美元符号。以下所有方法都应该起作用:

    sh 'echo $CHANGE_ID'
    sh "echo \$CHANGE_ID"
    sh "echo ${env.CHANGE_ID}"
    

    【讨论】:

    • 在使用非 sh 脚本中的变量时,如 emailext 插件、slack 插件等内部的变量怎么办?我已经用 emailext 的例子更新了这个问题。
    • 在这种情况下,我收到“发送到以下无效地址时出错:$CHANGE_AUTHOR_EMAIL”
    • 那你需要使用Groovy风格。
    • 是的,我有时问得太早了,然后还是找到了答案……再次感谢!
    • 实际上它似乎仍然失败......说发送电子邮件到:${env.CHANGE_AUTHOR_EMAIL} 发送到以下无效地址时出错:${env.CHANGE_AUTHOR_EMAIL}
    【解决方案2】:

    对于可能遇到此问题的任何人,这些变量仅在选中构建源 PR(与基础分支合并) 复选框时可用(这是在多分支作业中)。

    在其他 Jenkins 问题中查看更多信息:https://issues.jenkins-ci.org/browse/JENKINS-39838

    【讨论】:

    • 这个复选框在哪里?我在多部门工作中找不到它
    • 插件已更新,此答案无效。需要更新自己,以便我可以更新答案
    猜你喜欢
    • 2020-09-04
    • 2011-10-26
    • 1970-01-01
    • 2018-09-30
    • 2014-11-19
    • 2011-02-21
    • 1970-01-01
    • 2023-04-04
    相关资源
    最近更新 更多