Инициализация @ groovy .transform.Field с системной переменной Jenkins - PullRequest
1 голос
/ 20 марта 2020

Я использую 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()
    }
}
...