检查是否在 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