jenkins job dsl - 没有方法签名:java.lang.String.call()

Rob*_*ert 2 dsl groovy jenkins jenkins-job-dsl jenkins-groovy

我无法运行这段代码:

buildPath = 'applications'
buildJob(['java', 'nodejs'])


def buildJob(def jobList){
  for(job in jobList){
    def jobName = "${job}_seed"
    def jobDescription = "Jenkins DSL seed for ${job}"
    def jobScriptPath = "resources/dsl/${jobName}.groovy"
    job("${buildPath}/${jobName}")
  }
}
Run Code Online (Sandbox Code Playgroud)

所以,我收到这个错误:

buildPath = 'applications'
buildJob(['java', 'nodejs'])


def buildJob(def jobList){
  for(job in jobList){
    def jobName = "${job}_seed"
    def jobDescription = "Jenkins DSL seed for ${job}"
    def jobScriptPath = "resources/dsl/${jobName}.groovy"
    job("${buildPath}/${jobName}")
  }
}
Run Code Online (Sandbox Code Playgroud)

我不知道在哪里或什么原因导致了这个错误。我在函数之外创建了一个作业buildJob(def jobList),它正在工作,但我需要执行循环来自动化作业创建。

有任何想法吗?

pbs*_*dek 9

发布我遇到的类似问题。网上关于这个问题的讨论不多。

No signature of method: java.lang.String.call() is applicable for argument types: (java.lang.String) values: [some-value]

假设我们正在实现一个作业 dsl 插件(https://github.com/jenkinsci/multibranch-build-strategy-extension-plugin),例如:

includeRegionBranchBuildStrategy {

    includedRegions(String value)

}
Run Code Online (Sandbox Code Playgroud)

我们有这样的代码:

def includedRegions = r ? String.join("\n", r) : null

branchSources {
  branchSource {
    buildStrategies {
      if(includedRegions){
        includeRegionBranchBuildStrategy {
          includedRegions(includedRegions)
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

需要重命名您的变量才能使其正常工作!例如,该方法不能与上面定义的 var 具有相同的名称。

def regions = r ? String.join("\n", r) : null

branchSources {
  branchSource {
    buildStrategies {
      if(regions){
        includeRegionBranchBuildStrategy {
          includedRegions(regions)
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)