Переменные поля общей библиотеки Дженкинса не являются одиночными

#jenkins #singleton #shared-libraries

Вопрос:

Я создаю общую библиотеку Дженкинса и хочу сохранить глобальное состояние. В папке /vars я создал сценарий регистратора, но когда я использую его в другом сценарии в /vars, у него, по-видимому, есть своя собственная копия, поскольку в документации говорится: «Внутренне сценарии в каталоге vars создаются по требованию как синглеты».

 vars/log.groovy

@goovy.transform.Field
Level level = INFO

call( Level l, String message ) {
    if (level >= l) { 
        echo message
    }
}
 

и я использую его в другом сценарии:

 vars/foo.groovy

call() {
    log DEBUG, "hello world"
}
 

в основном сценарии:

 log.level = DEBUG
// or log.setLevel(DEBUG) but Groovy will
// create a synthetic method
foo // or foo()
 

foo() вызовет log (), но уровень ведения журнала в foo всегда будет ИНФОРМАЦИЕЙ.

Поэтому мой вопрос заключается в том, как сценарии могут совместно использовать одноэлементное значение между ними.

Комментарии:

1. Я создал синглтон в каталоге /src. Я могу сохранить состояние, уровень журнала, во всех случаях использования log(). Но один лайнер превратился в запутанную ссылку на класс в другом месте.