【问题标题】:groovy.lang.MissingPropertyException: No such property: ERROR_MESSAGE for class: groovy.lang.Bindinggroovy.lang.MissingPropertyException:没有这样的属性:类的ERROR_MESSAGE:groovy.lang.Binding
【发布时间】:2021-02-11 08:27:33
【问题描述】:

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

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

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

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

它指向的代码片段看起来像这样。

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

任何线索将不胜感激。

干杯

【问题讨论】:

  • env.ERROR_MESSAGE 在条件块的范围内,因此无法在该范围之外访问。您可能需要在更高的范围内声明它。

标签: jenkins groovy jenkins-pipeline


【解决方案1】:

常规解析 "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
     }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2021-01-06
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多