Ida*_*dar 2 jenkins jenkins-pipeline
鉴于以下管道:
stages {
stage ("Checkout SCM") {
steps {
checkout scm
sh "echo ${CHANGE_AUTHOR_EMAIL}"
sh "echo ${CHANGE_ID}"
}
}
}
Run Code Online (Sandbox Code Playgroud)
为什么这些变量无法解决并提供值?
最终我想使用这些环境变量发送电子邮件并合并拉取请求:
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>'''
)
}
}
Run Code Online (Sandbox Code Playgroud)
和
sh "curl -X PUT -d '{\'commit_title\': \'Merge pull request\'}' <git url>/pulls/${CHANGE_ID}/merge?access_token=<token>"
Run Code Online (Sandbox Code Playgroud)
奇怪的是,$PROJECT_NAME,$BUILD_NUMBER,$BUILD_URL做的工作......
更新:这可能是一个开放的错误... https://issues.jenkins-ci.org/browse/JENKINS-40486 :-(
是否有任何解决方法来获取这些值?
小智 5
您需要注意如何引用环境变量,具体取决于它是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}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3120 次 |
| 最近记录: |