gpt4 book ai didi

jenkins - 为什么在 Jenkinsfile 的 DSL 闭包中使用 `this` 或 `env` 时需要关键字 `param`

转载 作者:行者123 更新时间:2023-12-04 15:40:11 25 4
gpt4 key购买 nike

我有基于 "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()
}
}

在此代码中,我可以访问 envparams直接,正如预期的那样。

然而在顶级 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
}

为什么会这样?根据 Pipelines documentation 中的所有示例我应该可以访问 envparams直接地。
我究竟做错了什么?

最佳答案

这是 resolveStrategy 的问题.

def config = [:]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
config您提供的任何属性将解析为其值或空值,因此 owner没有查询它。在你的例子中 owner只是 this .这就是它起作用的原因。

取决于您实际尝试实现的目标, OWNER_FIRST可能是更好的策略。如果您无法更改此设置,最好使用没有属性默认值的数据结构。

关于jenkins - 为什么在 Jenkinsfile 的 DSL 闭包中使用 `this` 或 `env` 时需要关键字 `param`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44080531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com