Почему currentBuild.build (). GetActions (ParametersAction) .get (0) возвращает значения параметров по умолчанию, а не указанные значения в конвейере Jenkins? - PullRequest
3 голосов
/ 01 мая 2020

Я пытаюсь изменить значение параметра в конвейере Дженкинса. Вот мой последний код скрипта:

// Replace spaces in PROJECT_NAME parameter with dashes
script {
    def build = currentBuild.build()
    def parms = build.getActions(ParametersAction).get(0)
    for (ParameterValue parm : parms.getParameters()) {
        StringBuilder msg = new StringBuilder()
        msg.append(parm.getName())
        msg.append(": ")
        if (parm.getValue() == null) {
            msg.append("<null>")                           
        } else {
            msg.append(String.valueOf(parm.getValue()))   
        }
        print(msg)
    }
    def projectNameWithoutSpaces = new StringParameterValue("PROJECT_NAME", "${params.PROJECT_NAME}".replaceAll(" ", "-"))
    build.replaceAction(parms.createUpdated(Arrays.asList(projectNameWithoutSpaces)))
}

Я обнаружил, что parms содержит значения параметров по умолчанию, а не значения, указанные в сборке конвейера. Это, в свою очередь, приводит к тому, что build.replaceAction(parms.createUpdated(Arrays.asList(projectNameWithoutSpaces))) заменяет все значения параметров, кроме значения PROJECT_NAME, значением по умолчанию для параметра.

Почему parms содержит значения параметров по умолчанию, а не значения, указанные в строительство трубопровода? Как получить указанные значения параметров, чтобы я мог правильно изменить значение параметра PROJECT_NAME?

1 Ответ

0 голосов
/ 04 мая 2020

Это была ошибка пользователя с моей стороны; currentBuild.build().getActions(ParametersAction).get(0) действительно возвращает правильные значения параметров. Оказывается, что одна из моих более ранних неудачных попыток установила все значения параметров моего конвейера, за исключением значения параметра PROJECT_NAME, к их значениям по умолчанию.

Одним из побочных эффектов использования build.replaceAction() является то, что он действительно изменяется значение параметра PROJECT_NAME построения конвейера в веб-клиенте Jenkins. Поэтому, когда я go выполняю перестройку, параметр PROJECT_NAME имеет значение обновления (пробелы заменены на тире), что на самом деле не то, что я хочу.

Кроме того, в начале я попробовал более простое решение: установка params.PROJECT_NAME в новое значение:

// Replace spaces in PROJECT_NAME parameter with dashes
script {
    params.PROJECT_NAME = "${params.PROJECT_NAME}".replaceAll(" ", "-")
}

Однако это не удалось с java.lang.UnsupportedOperationException, поскольку объект params поддерживается java.util.Collections$UnmodifiableMap.

Я не был Помните, что значения параметров конвейера также доступны через объект env (спасибо zett42 за это). Поэтому я попытался установить env.PROJECT_NAME:

// Replace spaces in PROJECT_NAME parameter with dashes
script {
    env.PROJECT_NAME = "${env.PROJECT_NAME}".replaceAll(" ", "-")
}

Это работало просто отлично без изменения значения параметра PROJECT_NAME сборки конвейера в веб-клиенте Jenkins.

...