繁体   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