Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对该脚本的访问将阻止Jenkins Pipelines脚本_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

对该脚本的访问将阻止Jenkins Pipelines脚本

对该脚本的访问将阻止Jenkins Pipelines脚本,jenkins,groovy,jenkins-pipeline,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('TES

我将以下测试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)
}
我将此脚本放在
工作流libs/vars/test.groovy

当我执行以下管道时:

node {
  test 'foo'
}
这个过程永远不会结束,但是如果我删除
if(this.test)
则它会正常结束,尽管我得出结论,访问
这个
对象时会出现问题

有人面临类似的行为吗


Jenkins是time 1.651.3的最新版本。

在groovy
中,这个测试调用自动生成的或现有的getter
getTest()
()。您的脚本只是停留在无限递归中

介绍了如何在groovy中直接访问字段,尽管我不确定它是否能在管道中工作


或者,您可以只使用脚本范围的变量
test
,而不是
this.test
。或者将
this.test
重命名为与访问器方法名称不同的名称,如
this.\u test

最后,我使用
this
binding
对象克服了这个问题,如下所示:

def enableTest(enable = true) {
    // this goes to binding variables
    this.test = enable }
使用变量集(如果已设置!)


希望有帮助

谢谢@izzeki您的提示最终引导我进一步挖掘对象,并发现实际参数位于this.binding.variables下,这是一个映射对象,如果有人感兴趣或可以提供更好的解决方案,我会将此发现作为答案@tbo。您可能会发现,知道绑定是不可序列化的,但它具有
Map getVariables()
方法也很有用。
if (this.binding.variables['test'] && this.test) {
  // do something usefull
}