首页 > 解决方案 > groovy.lang.MissingPropertyException:没有这样的属性:类的ERROR_MESSAGE:groovy.lang.Binding

问题描述

我知道这个问题已经被问过很多次了,但是发生这种情况的原因总是不同的,因此再次询问。

我最近将我的 jenkins 从 2.270 升级到了 2.278 版本。

升级后,当我尝试运行其中一个管道时,出现以下错误并且管道失败。

groovy.lang.MissingPropertyException:没有这样的属性:类的ERROR_MESSAGE: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 是否正在初始化。

任何线索将不胜感激。

干杯

标签: jenkinsgroovyjenkins-pipeline

解决方案


"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
     }
    }


推荐阅读