为什么Groovy(Jenkins管道)不能识别类(静态)变量?

iszxjhcz  于 2023-10-15  发布在  Jenkins
关注(0)|答案(1)|浏览(125)

下面是Getting To Know Groovy Variables And Their Functions中的一个例子。EnvironmentMgr是我在其他地方定义的一个单例类,它可以工作。

@Singleton
class EnvironmentMgr {
  String ecsCluster = "sandbox"
  ...
}

abstract class EcsService {
  def setup() {
    if (envMgr == null) {
      println "envMgr is null"
      envMgr = EnvironmentMgr.instance
    }
  }

  protected static def envMgr = null
}

class Service1 extends EcsService {
  def setup() {
    super.setup()
    // Do something for Service1
  }
}

class Service2 extends EcsService {
  def setup() {
    super.setup()
    // Do something for Service2
  }
}

def svc1 = new Service1()
svc1.setup()
def svc2 = new Service2()
svc2.setup()

我希望EcsService:setup()中的println语句只打印一次,但它打印了两个调用。为什么会这样?我怎么才能让它工作?谢谢.

**编辑:**上面的代码在我的Mac上像预期的那样直接运行Groovy代码,但是当在Jenkins管道中运行时,静态性无法识别。

cidc1ykv

cidc1ykv1#

这个问题似乎是由于envMgr属性在Jenkins环境中不像静态属性那样工作。为了确保envMgr属性是Jenkins管道中所有EcsService示例的共享/静态属性,您可以使用static关键字显式地将其声明为静态属性:

abstract class EcsService {
  static def envMgr = null  // Declare envMgr as a static property

  def setup() {
    if (envMgr == null) {
      println "envMgr is null"
      envMgr = EnvironmentMgr.instance
    }
  }
}

相关问题