我将以下测试Groovy脚本添加为vars
workflow-libs
:
#!/usr/bin/groovy
this.test = false
def setTest(boolean test) { this.test = test }
def getTest() { this.test }
def log(level, msg) {
echo "[${level}] ${msg}"
}
def call(msg) {
if (this.test) log('TEST', msg)
}
我将此脚本放在workflow-libs/vars/test.groovy
下。
当我执行以下管道时:
node {
test 'foo'
}
该过程永远不会完成,但是如果我删除if (this.test)
,那么它会正常完成,但我得出的结论是访问this
对象时存在问题?
任何人都有类似的行为吗?
Jenkins是时间1.651.3的最新版本。
答案 0 :(得分:2)
在常规this.test
中调用自动生成的或现有的getter getTest()
(doc)。你的脚本只是陷入无限递归。
Here解释了如何直接访问groovy中的字段,但我不确定它是否适用于管道。
或者,您只能使用脚本范围的变量test
而不是this.test
。或者将this.test
重命名为与访问者方法不同的内容'像this._test
这样的名字。
答案 1 :(得分:0)
最后,我设法使用binding
的{{1}}对象过度传递此问题,如下所示:
this
使用变量集(如果已设置!)
def enableTest(enable = true) {
// this goes to binding variables
this.test = enable }
希望有所帮助