詹金斯只执行Groovy闭合的第一行

时间:2019-03-06 11:11:49

标签: jenkins groovy closures

我有以下两个类,它们在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")

输出:
世界您好!
测试
测试

0 个答案:

没有答案