簡體   English   中英

Jenkins 文件,檢查全局變量是否存在

[英]Jenkins file, check if Globals variable exists

我有 jenkinsfile 定義了 Globals 變量超時

class Globals {
    static String TEST_TIMEOUT = ""
}

我正在使用共享庫中的函數我正在使用全局變量為 function 設置超時。 由於其他項目使用的共享庫沒有定義全局變量,因此我在 function 文件中定義了環境變量,用作超時的默認值。

env.TESTS_TIME_OUT="10080"

然后在 function 中我想檢查 Globals 變量是否存在,我想使用該值作為超時,如果不使用默認值。

if(Globals.TEST_TIMEOUT){
   env.TESTS_TIME_OUT= "${Globals.TEST_TIMEOUT}"   
}
timeout(time: "${env.TESTS_TIME_OUT}", unit: 'MINUTES') {
.
.
.
}

我以前在 env 參數上成功過,但這次我遇到了錯誤

No such field found: field java.lang.Class TEST_TIMEOUT 

任何想法如何解決這個問題? 或者任何其他方法來檢查 Globals 變量是否存在?

謝謝

如果GlobalsGlobals.TEST_TIMEOUT不存在,您可以捕獲groovy.lang.MissingPropertyException

try {
    env.TESTS_TIME_OUT = Globals.TEST_TIMEOUT
}
catch( groovy.lang.MissingPropertyException e ) {
    env.TESTS_TIME_OUT = "10080"
}

您甚至可以將此模式移動到通用 function...

def getPropOrDefault( Closure c, def defaultVal ) {
    try {
        return c()
    }
    catch( groovy.lang.MissingPropertyException e ) {
        return defaultVal
    }
}

...可以這樣調用:

env.TESTS_TIME_OUT = getPropOrDefault({ Globals.TEST_TIMEOUT }, '10080')

如果您想處理許多不同的全局變量,這可能很有用。 使您免於編寫許多try / catch塊。

需要閉包以確保表達式Globals.TEST_TIMEOUT將在getPropOrDefaulttry / catch塊內而不是在 function 調用之前進行評估。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM