Файл Дженкинса, проверьте, существует ли переменная Globals - PullRequest
1 голос
/ 21 апреля 2020

У меня есть jenkinsfile с определенной переменной Globals для времени ожидания

class Globals {
    static String TEST_TIMEOUT = ""
}

Я использую функции из общей библиотеки. Я использую глобальную переменную, чтобы установить время ожидания для функции. Поскольку совместно используемая библиотека, используемая другими проектами, которая не определяет переменную Globals, я определила переменную среды в файле функции, которая будет использоваться в качестве значения по умолчанию для времени ожидания.

env.TESTS_TIME_OUT="10080"

Затем в функции я хочу проверить если переменная 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?

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2020

Вы можете поймать groovy.lang.MissingPropertyException, которое будет выброшено, если Globals или Globals.TEST_TIMEOUT не существует:

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

Вы даже можете переместить этот шаблон в обобщенную функцию c. .

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 будет оцениваться внутри блока try / catch * 1020. * вместо вызова функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...