2016-07-07 69 views
1

我有以下的測試Groovy腳本添加爲varsworkflow-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對象的問題嗎?

任何人都面臨類似的行爲?

詹金斯是時間1.651.3的最新版本。

回答

2

在groovy this.test調用自動生成或現有的吸氣劑getTest()doc)。你的腳本只是陷入無限遞歸。

Here解釋瞭如何直接訪問groovy中的字段,雖然我不確定它會在管道中工作。

或者,您可以只使用腳本範圍變量test而不是this.test。或將this.test重命名爲與訪問方法名稱不同的內容,例如this._test

+0

感謝@izzeki您的提示最終導致我挖掘更多的對象,並發現實際參數位於this.binding.variables這是一個Map對象ct如果有人有興趣或可以提供更好的解決方案,我會把這個發現作爲答案 – tbo

+0

Sure @tbo。你可能會發現知道Binding不是可序列化的,但它有'Map getVariables()'方法。 – izzekil

0

我終於成功地在使用的thisbinding對象傳遞這個問題如下:(!如果它設置)

def enableTest(enable = true) { 
    // this goes to binding variables 
    this.test = enable } 

使用變量集

if (this.binding.variables['test'] && this.test) { 
    // do something usefull 
} 

希望它幫助