我知道这个问题已经被问过很多次了,但发生这种情况的原因总是不同,因此再次询问。
我最近将 jenkins 从 2.270 升级到 2.278 版本。
升级后,当我尝试运行其中一个管道时,出现以下错误并且管道失败。
groovy.lang.MissingPropertyException:没有这样的属性:ERROR_MESSAGE for class: groovy.lang.Binding
它指向的代码片段如下所示。
def <func2>(body) {
<some code>
stages {
stage('Initialise') {
steps {
buildName "${JOB_NAME}#${BUILD_NUMBER}"
script{
if (env.RELEASE == "1.0"){
env.ERROR_MESSAGE = "Please provide RELEASE"
currentBuild.result = 'FAILURE'
return
}
}
}
post {
unsuccessful {
notifySlack(
**message: "Deploy Initialise failed: ${ERROR_MESSAGE}",**
channel:"${slackDeployChannel}")
script{
env.DEPLOY = 'no'
}
}
}
}
还有一个地方正在调用 env.ERROR_MESSAGE
def <func1>(arguments) {
try{
<SOME CODE>
return 0
}
catch (Exception e) {
env.ERROR_MESSAGE = e.getMessage()
return 0
}
}
func1 和 func2 都是单独调用的单独函数。 不确定 env.ERROR_MESSAGE 是否正在初始化。
任何线索将不胜感激。
干杯
答案 0 :(得分:1)
groovy 解析 "Deploy Initialise failed: ${ERROR_MESSAGE}"
时失败,因为初始化 ENV 变量的范围有限。
可能是这样的:
定义一个变量并让它在任何你想要的地方分配和使用。
def errorMessage
def <func2>(body) {
<some code>
stages {
stage('Initialise') {
steps {
buildName "${JOB_NAME}#${BUILD_NUMBER}"
script{
if (env.RELEASE == "1.0"){
errorMessage = "Please provide RELEASE"
currentBuild.result = 'FAILURE'
return
}
}
}
post {
unsuccessful {
notifySlack(
**message: "Deploy Initialise failed: ${errorMessage}",**
channel:"${slackDeployChannel}")
script{
env.DEPLOY = 'no'
}
}
}
}
def <func1>(arguments) {
try{
<SOME CODE>
return 0
}
catch (Exception e) {
errorMessage = e.getMessage()
return 0
}
}