为什么在Jenkinsfile的DSL闭包中使用`env`或`param`时需要关键字
发布时间:2020-12-14 16:27:52 所属栏目:大数据 来源:网络整理
导读:我有基于 “structured DSL”概念的代码. // vars/buildStuff.groovydef call(body) { def config = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = config body() node { assert env assert params doStuff() }} 在这段代码中,我可以
我有基于
“structured 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:无法在null对象上获取属性“SOME_PARAM”.我必须通过写这个来解决这个问题: buildStuff { someParam=this.params.SOME_PARAM buildId=this.env.BUILD_ID } 为什么会这样?根据Pipelines documentation中的所有示例,我应该能够直接访问env和params. 解决方法
这是resolveStrategy的一个问题.
def config = [:] body.resolveStrategy = Closure.DELEGATE_FIRST body.delegate = config 您提供的配置将任何属性解析为其值或为null,因此不会查询所有者.在你的例子中,所有者就是这个.这就是它的原因. 根据您实际想要实现的目标,OWNER_FIRST可能是更好的策略.如果您无法更改此设置,请更好地使用没有默认值的数据结构. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |