我有基于“结构化DSL”概念的代码。
// vars/buildStuff.groovy
def call(body) {
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
node {
assert env
assert params
doStuff()
}
}
在这段代码中我能访问env
和params
直接,符合市场预期。
但是在顶层Jenkinsfile
:
buildStuff {
someParam=params.SOME_PARAM
buildId=env.BUILD_ID
}
原因java.lang.NullPointerException: Cannot get property 'SOME_PARAM' on null object
。我必须通过将其编写为:
buildStuff {
someParam=this.params.SOME_PARAM
buildId=this.env.BUILD_ID
}
为什么会这样?根据所有的例子管道的文件,我应该能够访问env
和params
直接。我究竟做错了什么?
的问题resolveStrategy
。
def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
在config
您提供的解决所有的财产价值或空,因此owner
没有查询它。在您的示例中,owner
正义是this
。这就是为什么它起作用。
根据您实际要实现的目标,OWNER_FIRST
可能是更好的策略。如果您不能更改此设置,最好使用没有默认属性的数据结构。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句