Я использую Jenkins 2.1382.2.
В этом я могу объявить и инициализировать поле со значением в моем Jenkinsfile:
@groovy.transform.Field final MY_FIELD = "Some Value";
Но если я попробую это :
@groovy.transform.Field final MY_FIELD = "${JenkinsSystemVariable}";
, где JenkinsSystemVariable
установлено в Jenkins> Настройка> Глобальные свойства , я получаю groovy.lang.MissingPropertyException: No such property: JenkinsSystemVariable for class: WorkflowScript
Я пытался System.getProperty("JenkinsSystemVariable")
, что это не возвращает значение (и требует, чтобы я добавил java.lang.System.getPropery
к утвержденным сценариям)
Есть ли другой подход к этому, чтобы я мог использовать переменную в качестве поля?
Другой подход заключается в том, чтобы не делать его окончательным и динамически присваивать значение, но у меня есть и другие заключительные поля, которые также анализируют это поле, которое необходимо реорганизовать. Глобальная собственность)
1. Вызов JPG вне узла, работает нормально
final myUrl = "${JenkinsSystemVariable}";
echo myUrl
node ("node-label") {
stage("something") {
echo myUrl
}
}
Нет проблем с печатью
2. JPG Var, проблема не определена в области действия метода
final myUrl = "${JenkinsSystemVariable}";
echo myUrl
def myMethod () {
myUrl
}
node ("node-label") {
stage("something") {
println myMethod()
}
}
3. Нет JPG Var + аннотация, почти, но не правильное значение
@groovy.transform.Field final myUrl = "MyStringConstant";
def myMethod () {
myUrl
}
node ("node-label") {
stage("something") {
println myMethod()
}
}
Обходное решение
Удостоверится, что значение извлекается из одного местоположения, просто это метод динамического c.
def myUrl() {
"${JenkinsSystemVariable}"
}
def myMethod () {
myUrl()
}
node ("node-label") {
stage("something") {
println myMethod()
}
}