下面是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管道中运行时,静态性无法识别。
1条答案
按热度按时间cidc1ykv1#
这个问题似乎是由于
envMgr
属性在Jenkins环境中不像静态属性那样工作。为了确保envMgr
属性是Jenkins管道中所有EcsService
示例的共享/静态属性,您可以使用static关键字显式地将其声明为静态属性: