Передача замыканий из класса в Groovy / Jenkins - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь создать класс JobGenerator, который передаст шаг сборки вызывающему экземпляру.Я сталкиваюсь с проблемой, где, если я получаю эту ошибку, когда я пытаюсь запустить это:

hudson.remoting.ProxyException: groovy.lang.MissingMethodException: Нет подписи метода: org.jenkinsci.plugins.workflow.cps.CpsClosure2.build () применим для типов аргументов: (java.util.LinkedHashMap) значения: [[job: FooJob]]

class BuildGenerator implements Serializable {     

static def generateJob() {
    return  [
            "TestJob",
            { ->
                build(
                        job: 'FooJob'
                )
            },
    ]
  }        
}        

node(){
    def tasks = [:]
    def label
    def task

    stage("Build") {
        def generator = new BuildGenerator()            
        tasks["Testing"] = generator.generateJob()[1]
        parallel tasks
    }
}

Если я удаляю generateJobфункция вне класса, то она работает нормально.Что я делаю не так с замыканиями здесь?Я новичок в мире Groovy / Дженкинс.

1 Ответ

0 голосов
/ 28 февраля 2019

Ну ... Так работает конвейер Groovy / Jenkins.build доступно внутри node как остальные шаги и функции.Если вы хотите получить к ним доступ, вы должны передать экземпляр CPS методу, например так (или используйте конструктор, чтобы передать экземпляр только один раз):

class BuildGenerator implements Serializable {     

static def generateJob(script) {
    return  [
            "TestJob",
            { ->
                script.build(
                        job: 'FooJob'
                )
            },
    ]
  }        
}        

node(){
    def tasks = [:]
    def label
    def task

    stage("Build") {
        def generator = new BuildGenerator()            
        tasks["Testing"] = generator.generateJob(this)[1]
        parallel tasks
    }
}
...