IllegalArgumentException:应为命名参数(Jenkins)

IllegalArgumentException:应为命名参数(Jenkins),jenkins,groovy,Jenkins,Groovy,我在尝试运行jenkins作业时遇到以下错误。任何帮助都将不胜感激 java.lang.IllegalArgumentException:应为命名参数,但得到 [org.jenkinsci.plugins.workflow.cps。CpsClosure2@33c7c4a6, org.jenkinsci.plugins.workflow.cps。CpsClosure2@79505a8c, org.jenkinsci.plugins.workflow.cps。CpsClosure2@6a96df3,

我在尝试运行jenkins作业时遇到以下错误。任何帮助都将不胜感激

java.lang.IllegalArgumentException:应为命名参数,但得到 [org.jenkinsci.plugins.workflow.cps。CpsClosure2@33c7c4a6, org.jenkinsci.plugins.workflow.cps。CpsClosure2@79505a8c, org.jenkinsci.plugins.workflow.cps。CpsClosure2@6a96df3, org.jenkinsci.plugins.workflow.cps。CpsClosure2@1a0cb771, org.jenkinsci.plugins.workflow.cps。CpsClosure2@17e3a262]在 org.jenkinsci.plugins.workflow.cps.DSL.singleParam(DSL.java:606)位于 org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:594)位于 org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:534)位于 org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:219)位于 org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:178)位于 org.jenkinsci.plugins.workflow.cps.CpsScript.invokeMethod(CpsScript.java:122) 位于sun.reflect.GeneratedMethodAccessor102.invoke(未知源)

我的代码是:

node("dvsacvsmgmt") {

    stage("Build") {

        def buildJobs = []
        for (BACKEND_SERVICE in BACKEND_SERVICES) {
            SVC = BACKEND_SERVICE.replaceAll('-','_')

            switch (BRANCH_SVC) {
                case ["develop","master"]:
                    def buildJob = {
                        build "${ROOT_FOLDER}/2_Build/Backend/${SVC}/job_build_backend_" + BRANCH_SVC + "_" + SVC +".groovy"
                    }
                    buildJobs.add(buildJob)
                break
                default:
                    def buildJob = {
                        build "job_${SVC}": "${ROOT_FOLDER}/2_Build/Backend/${SVC}/job_build_backend_" + BRANCH_SVC + "_" + SVC +".groovy",
                                parameters: [gitParameter(name: "BRANCH", value: BRANCH_SVC)]
                    }
                    buildJobs.add(buildJob)
                break
            }
        }
        parallel(buildJobs)
    }
}
注意:我的变量在顶部定义

分支、分支SVC、根文件夹、后端服务


您看到这个异常是因为在您的示例中,
buildJobs
是一个闭包列表,它应该是一个映射。使用后端服务名称作为传递给
parallel()
方法的映射的键是有意义的。考虑以下代码更改:

node("dvsacvsmgmt") {
    stage("Build") {

        def buildJobs = [:]
        for (BACKEND_SERVICE in BACKEND_SERVICES) {
            SVC = BACKEND_SERVICE.replaceAll('-','_')

            switch (BRANCH_SVC) {
                case ["develop","master"]:
                    def buildJob = {
                        build "${ROOT_FOLDER}/2_Build/Backend/${SVC}/job_build_backend_" + BRANCH_SVC + "_" + SVC +".groovy"
                    }
                    buildJobs.put(BACKEND_SERVICE, buildJob)
                break
                default:
                    def buildJob = {
                        build "job_${SVC}": "${ROOT_FOLDER}/2_Build/Backend/${SVC}/job_build_backend_" + BRANCH_SVC + "_" + SVC +".groovy",
                                parameters: [gitParameter(name: "BRANCH", value: BRANCH_SVC)]
                    }
                    buildJobs.put(BACKEND_SERVICE, buildJob)
                break
            }
        }
        parallel(buildJobs)
    }
}
它调用

buildJobs.put(BACKEND_SERVICE, buildJob)
反而

buildJobs.add(buildJob)
创建在
parallel
方法调用中被视为命名参数的映射