Estou seguindo um exemplo em Conhecendo as variáveis do Groovy e suas funções e tenho o seguinte. EnvironmentMgr
é uma classe singleton que defini em outro lugar e funciona.
@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()
Espero que a println
instrução EcsService:setup()
seja impressa uma vez, mas foi impressa nas duas chamadas. Por que é que? Como posso fazer isso funcionar? Obrigado.
EDIT: O código acima funciona conforme esperado como código Groovy direto no meu Mac, mas quando executado em um pipeline Jenkins, a estática não é reconhecida.
Parece que o problema se deve ao fato de a
envMgr
propriedade não estar se comportando como uma propriedade estática no ambiente Jenkins. Para garantir que aenvMgr
propriedade seja compartilhada/estática em todas as instâncias deEcsService
um pipeline Jenkins, você pode declará-la explicitamente como uma propriedade estática usando a palavra-chave static: