为什么jenkinsfile以这种方式使用闭包?

时间:2017-10-04 20:13:45

标签: jenkins groovy jenkins-pipeline

这是编写Jenkins管道代码的常见模式:

def call(body) {    
    def config = [:]
    body.resolveStrategy = Closure.DELEGATE_FIRST
    body.delegate = config
    body()
}

我不确定如何简单地说出来,但这个闭包是隐式导入的,可以通过它所在的.groovy文件的文件名来调用。

我称之为:

MyClosure { myarg = 'sdfsdf' }

我不完全确定这是做什么的。它正在执行call(body),然后将body指定为代理人。所以这意味着我通过它的关闭是代表,但不仅仅是所有者?华?我很困惑。

1 个答案:

答案 0 :(得分:9)

当它运行时,它正在创建一个空地图(config)。然后它告诉闭包(body)首先查看委托,通过将其resolveStrategy设置为常量Closure.DELEGATE_FIRST来查找属性。然后,它将config映射指定为正文对象的委托。

现在,当您执行body()闭包时,变量的范围限定为config地图,现在为config.myarg = 'sdfsdf'

现在,您可以在代码中稍后轻松访问config中的值地图。

body所有者,默认情况下是委托。但是,当您将委托切换为config并告诉它首先使用委托时,您将获得变量config的范围。