CHANGE_AUTHOR_EMAIL 和 CHANGE_ID 环境变量 return "No such property: ..."
CHANGE_AUTHOR_EMAIL and CHANGE_ID environment variables return "No such property: ..."
给定以下管道:
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 :-(
是否有任何解决方法来获取这些值?
对于任何可能遇到此问题的人,仅当检查了构建Origin PRS(与基本分支合并)的复选框时,这些变量才可用(这是在多的中分支机构工作)。
在其他 Jenkins 问题中查看更多信息:https://issues.jenkins-ci.org/browse/JENKINS-39838
您需要注意如何引用环境变量,具体取决于它是 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}"
给定以下管道:
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 :-(
是否有任何解决方法来获取这些值?
对于任何可能遇到此问题的人,仅当检查了构建Origin PRS(与基本分支合并)的复选框时,这些变量才可用(这是在多的中分支机构工作)。
在其他 Jenkins 问题中查看更多信息:https://issues.jenkins-ci.org/browse/JENKINS-39838
您需要注意如何引用环境变量,具体取决于它是 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}"