检查是否在 Jenkins 管道中声明了 ENV 属性
Check if ENV property is declared in Jenkins pipeline
在我的 Jenkins 管道中,我有:
library 'my-shared-library'
pipeline {
environment {
MY_PROPERTY = 'ABC'
}
}
在我的 Jenkins 管道中包含的共享库中,我使用 MY_PROPERTY 作为:
def someMethod() {
def someText = "blah blah ${MY_PROPERTY}"
}
问题是我从许多管道调用 someMethod() 并且在某些管道中 MY_PROPERTY 未定义:
library 'my-shared-library'
pipeline {
environment {
}
}
所以我收到以下错误:
groovy.lang.MissingPropertyException: 没有这样的 属性: MY_PROPERTY 对于 class: my.comapny.mylib
我需要一种方法来检查 MY_PROPERTY 是否在 environemnt 部分内声明,如下所示:
def someMethod() {
if is defined MY_PROPERTY then
def someText = "blah blah ${MY_PROPERTY}"
else
def someText = "X"
}
如何检查 MY_PROPERTY 是否已声明?如果我尝试访问 MY_PROPERTY 但它未在我收到的环境中声明:
groovy.lang.MissingPropertyException: 没有这样的 属性: MY_PROPERTY 对于 class: my.comapny.mylib
您遇到此问题是因为您使用了隐式环境变量调用。使用像 env.MY_PROPERTY
这样的显式环境变量调用总是更好的选择。这样你就可以避免 No such property
异常,当环境变量没有定义时,你会得到一个 null
值。这样,您可以进行简单的检查,例如:
def someMethod() {
def someText = "blah blah ${env.MY_PROPERTY ?: 'foo'}"
}
如果未设置 env.MY_PROPERTY
,则结果为 blah blah foo
。
在我的 Jenkins 管道中,我有:
library 'my-shared-library'
pipeline {
environment {
MY_PROPERTY = 'ABC'
}
}
在我的 Jenkins 管道中包含的共享库中,我使用 MY_PROPERTY 作为:
def someMethod() {
def someText = "blah blah ${MY_PROPERTY}"
}
问题是我从许多管道调用 someMethod() 并且在某些管道中 MY_PROPERTY 未定义:
library 'my-shared-library'
pipeline {
environment {
}
}
所以我收到以下错误:
groovy.lang.MissingPropertyException: 没有这样的 属性: MY_PROPERTY 对于 class: my.comapny.mylib
我需要一种方法来检查 MY_PROPERTY 是否在 environemnt 部分内声明,如下所示:
def someMethod() {
if is defined MY_PROPERTY then
def someText = "blah blah ${MY_PROPERTY}"
else
def someText = "X"
}
如何检查 MY_PROPERTY 是否已声明?如果我尝试访问 MY_PROPERTY 但它未在我收到的环境中声明:
groovy.lang.MissingPropertyException: 没有这样的 属性: MY_PROPERTY 对于 class: my.comapny.mylib
您遇到此问题是因为您使用了隐式环境变量调用。使用像 env.MY_PROPERTY
这样的显式环境变量调用总是更好的选择。这样你就可以避免 No such property
异常,当环境变量没有定义时,你会得到一个 null
值。这样,您可以进行简单的检查,例如:
def someMethod() {
def someText = "blah blah ${env.MY_PROPERTY ?: 'foo'}"
}
如果未设置 env.MY_PROPERTY
,则结果为 blah blah foo
。