jenkins job dsl — нет подписи метода: java.lang.String.call()

Я не могу запустить этот фрагмент кода:

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}")
  }
}

Итак, я получаю эту ошибку:

Processing provided DSL script
ERROR: (script, line 12) No signature of method: java.lang.String.call() is applicable for argument types: (org.codehaus.groovy.runtime.GStringImpl) values: [applications/java_seed]
Possible solutions: wait(), any(), wait(long), take(int), each(groovy.lang.Closure), any(groovy.lang.Closure)
Finished: FAILURE

Я не вижу, где и что вызывает эту ошибку. Я создал одно задание вне функции buildJob(def jobList), и оно работает, но мне нужно выполнить цикл для автоматизации создания заданий.

Любые идеи?


person Robert    schedule 29.07.2019    source источник


Ответы (2)


вы повторяете строковый массив в следующей строке:

for(job in jobList){

и используя для этого переменную job.

затем вы пытаетесь вызвать метод call для этой переменной:

job("${buildPath}/${jobName}")
person daggett    schedule 29.07.2019

Публикация аналогичной проблемы, с которой я столкнулся. В сети мало информации по этому вопросу.

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)

}

И у нас есть такой код:

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

branchSources {
  branchSource {
    buildStrategies {
      if(includedRegions){
        includeRegionBranchBuildStrategy {
          includedRegions(includedRegions)
        }
      }
    }
  }
}

Нужно переименовать вашу переменную, чтобы заставить ее работать! например, метод не может иметь то же имя, что и переменная, определенная выше.

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

branchSources {
  branchSource {
    buildStrategies {
      if(regions){
        includeRegionBranchBuildStrategy {
          includedRegions(regions)
        }
      }
    }
  }
}
person pbsladek    schedule 09.03.2021