为什么詹金斯菲尔(Jenkinsfile)以这种方式使用封闭



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

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

我不确定如何简单地介绍一下,但是这种封闭被隐式导入,可以通过其居住在.groovy文件的文件名来调用。

我称其为:

MyClosure { myarg = 'sdfsdf' }

我不完全确定这在做什么。它正在执行call(body),然后分配body作为委托。因此,这意味着我通过的是代表,但这不仅仅是所有者吗?哇?我很困惑。

运行时,它正在创建一个空的地图(config)。然后,它告诉闭合(body)首先查看代表,以通过将其分辨率设置为常数Closure.DELEGATE_FIRST来查找属性。然后将config映射分配为身体对象的委托。

现在,当您执行body()闭合时,变量将范围范围为config地图,因此现在config.myarg = 'sdfsdf'

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

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

最新更新