groovy.lang.MissingPropertyException: 没有这样的属性: ERROR_MESSAGE for class: groovy.lang.Binding

时间:2021-02-11 08:27:33

标签: jenkins groovy jenkins-pipeline

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

我最近将 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 是否正在初始化。

任何线索将不胜感激。

干杯

1 个答案:

答案 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
     }
    }