【问题标题】:groovy.lang.MissingPropertyException: No such property: props for class: groovy.lang.Bindinggroovy.lang.MissingPropertyException:没有这样的属性:类的道具:groovy.lang.Binding
【发布时间】:2021-01-06 13:39:05
【问题描述】:

我正在尝试使用 groovy 脚本对 jenkins 管道进行一些更改,但我不断收到此错误:

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

我尝试用 def 声明变量,但仍然得到异常

 pipeline {
    agent any
        stages {
            stage('Build'){
            steps {
                script {
                    // env.application_servers = 'sl2o2xbar01;sl2o2xbar02'
                    def hb_parameters = []
                    if (env.application_servers.length() > 0)  {
                        if (env.hb_job_params.length() > 0){    
                        try {
                            //env.hb_job_params
                            /*
                            {
                                "sl2o2xbar01": {
                                    "ENV": "DEV",
                                    "dev_xbar_host": "sl2o2xbar01"
                                },
                                    "sl2o2xbar02": {
                                    "ENV": "DEV",
                                    "dev_xbar_host": "sl2o2xbar0"
                                }
                            }
                            */
                            def props =  readJSON text: env.hb_job_params
                            //props = ['sl2o2xbar01':['ENV':'DEV', 'dev_xbar_host':'sl2o2xbar01'], 'sl2o2xbar02':['ENV':'DEV', 'dev_xbar_host':'sl2o2xbar02']]
                            def hb_job_application_servers = props.keySet()
                            echo "${props}"
                            } catch(e) {
                            echo "Caught: ${e} JSON not valid."
                            currentBuild.result = 'FAILURE'
                            }   
                        }
                        application_servers_list = env.application_servers.split(';')
                        for( String application_server : application_servers_list ){
                            
                            if (
                                env.application_services_list.contains('heartbeat_consumer') &&
                                props.get(application_server)
                            ){
                                for ( param in props.get(application_server)) {
                                    hb_parameters.add([$class: 'StringParameterValue', name: ${param.key}, value: ${param.value}])
                                }
                                echo hb_parameters
                                echo "triggering heartbeat_consumer build"
                                build job: "dvmt30-realm-monitor", wait: false, parameters: hb_parameters
                            }
                        }
                    }
                    
                }
            }
        }
    }
}

【问题讨论】:

  • 老兄,你有没有看我描述的问题?

标签: jenkins groovy


【解决方案1】:

你对变量props的定义在try-catch里面:

try {
    def props =  readJSON text: env.hb_job_params
    ...
}

但后来,您尝试在 props.get(application_server) 中使用它,但该变量此时不再存在

【讨论】:

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