Дженкинс позволяет нам захватить Сингелтон запущенного экземпляра с помощью Дженкинса. get () . Я пытаюсь создать класс в моей разделяемой библиотеке, в которой CRUD является облачным провайдером. Мой код выглядит следующим образом.
@NonCPS
def create(){
Jenkins jenkins = Jenkins.getInstance()
// logic to create cloud
jenkins.clouds.add(tmpCloud)
jenkins.save()
}
@NonCPS
def delete(){
Jenkins jenkins = Jenkins.getInstance()
def newlist = jenkins.clouds.findAll{ it.getDisplayName() != cloud }
if(newlist){
jenkins.clouds.clear()
}
for ( int i = 0; i < newlist.size; i++ ) {
jenkins.clouds.add(newlist[i])
}
jenkins.save()
}
Если я запускаю только функцию create (), код работает как положено, то же самое, если я запускаю только delete (), но если я запускаю оба в одной и той же работе, какthis.
cloud.create()
cloud.delete()
Тогда будет работать только создание, ошибка удаления не будет, но она тоже ничего не сделает. Можно ли повторно инициализировать синглтон? Я чувствую, что это то, что мне нужно сделать. Я попытался сохранить экземпляр jenkins как поле моего класса, но это привело к ошибке сериализуемой Hudson. Я не вижу способа передать синглтон Дженкинса из-за проблем с CPS.