加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

为什么在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可能是更好的策略.如果您无法更改此设置,请更好地使用没有默认值的数据结构.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读