这是编写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
的范围。