访问此块可以阻止Jenkins管道脚本

时间:2016-07-07 13:19:38

标签: jenkins groovy jenkins-pipeline

我将以下测试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的最新版本。

2 个答案:

答案 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 }

希望有所帮助