В настоящее время я работаю над сценарием Jenkins, который загружает другой сценарий Jenkins и пытается использовать его в качестве объекта. Предположим, мой код выглядит так:
Под основным сценарием Дженкинса:
node() {
a = load ("path/to/file")
println("Printing ${a.aVar}") //This prints "a"
a.changeAVar("b")
println("Printing ${a.aVar}") //This prints "b"
println("Printing ${aVar}") //This should fail
}
В пути / к / файлу:
import groovy.transform.Field
@Field def aVar = "a"
def changeAVar(newAVar){
//CODE TO CHANGE aVar = newAVar
}
return this
К сожалению, я понятия не имею, как изменить aVar на newAVar, не делая aVar глобальным. Я пробовал следующее:
- aVar = newAVar превращает aVar в глобальный
- @ Field aVar = newAVar просто не работает, так как @Field должен быть в теле скрипта.
- def aVar = newAVar, очевидно, не работает, поскольку aVar превращается в локальную переменную
- this.aVar = newAVar по некоторым причинам также превращает aVar в глобальный
- Даже попытка изменить aVar вне скрипта с помощью a.aVar = "b" просто превращает его в глобальный
(С другой стороны, если вы превращаете aVar в список и добавляете его вместо замены, он работает так, как ожидалось)
Можно ли переназначить переменные @Field после их инициализации? Если нет, то как люди обычно решают эту проблему? (Я думал об упаковке подпрограммы в классе, который мог бы инициализировать, но я чувствую, что это больше проблем, чем стоит, и менее интуитивно понятно)
Спасибо.