Дженкинс только выполняет первую строку заводной закрытия - PullRequest
1 голос
/ 06 марта 2019

У меня есть следующие два класса, которые отлично работают локально в Groovy, но как только я использую их с общими библиотеками Jenkins, я сталкиваюсь с некоторыми проблемами.

. / Template.groovy

class Template {
    String arch
    String type
    def body = {}

    Template(type, arch, body) {
        this.arch = arch
        this.type = type
        this.body = body
    }
}

. / TemplateBook.groovy

import Template

class TemplateBook {
    def templates = []

    TemplateBook() {
        def template = new Template("test", "lnx", { args -> sh('echo "Hello World!"'); sh("echo Test"); sh("echo $args")})
        templates.push(template)
    }

    def getTemplate(type, arch) {
        def template
        for (def i = 0; i < templates.size(); i++) {
            if (templates[i].arch == arch && templates[i].type == type) {
                template = templates[i].getBody()
                i = templates.size()
            }
        }
        return template
    }
}

Использование Template.body напрямую работает просто отлично (локально и в Jenkins), но при использовании TemplateBook.getTemplate() выполняется только первая строка замыкания (тела).

def templateBook = new TemplateBook()
def body = templateBook.getTemplate("test", "lnx")

body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = this
body("test")

Выход:
Привет, мир!

def template = new Template("type", "arch", { args -> sh('echo "Hello World!"'); sh("echo Test"); sh("echo $args")})

def body2 = template.body
body2.resolveStrategy = Closure.DELEGATE_FIRST
body2.delegate = this
body2("test")

Выход:
Привет, мир!
Тест
тест

...