Ввод выбора трубопровода Jenkins со списком карт в groovy не работает - PullRequest
1 голос
/ 02 апреля 2020

В одном из моих конвейерных сценариев Jenkins есть следующие данные:

def IMAGE_TAG = input message: 'Please select a Version', ok: 'Next',
    parameters: [choice(name: 'IMAGE_TAG', choices: imageTags, description: 'Available Versions')]

imageTags - это список карт, например:

imageTags : [
            [targetSuffix: "", sourceSuffix: "v2.17.1"],
]

Когда я запускаю скрипт, Я могу выбрать только [targetSuffix: "", sourceSuffix: "v2.17.1"] из выпадающего списка, как и ожидалось.

В моем скрипте я также вижу выбранное значение:

echo "Selected Version = ${env.SELECTED_IMAGE_TAG}"

[Pipeline] echo Selected Version = {targetSuffix=, sourceSuffix=v2.17.1}

Теперь я хотел выяснить, какой элемент из исходного списка imageTags был выбран, но мой скрипт не работает должным образом:

def selectedImageTag = imageTags.find { it.targetSuffix == "${env.SELECTED_IMAGE_TAG.targetSuffix}" }

Я получаю следующее исключение:

groovy.lang.MissingPropertyException: No such property: targetSuffix for class: java.lang.String

Мой вопрос: Как я могу получить выбранный предмет по своему выбору из исходного списка карт?

1 Ответ

1 голос
/ 02 апреля 2020

Шаг input возвращает строку, поэтому вы не можете написать env.SELECTED_IMAGE_TAG.targetSuffix. Вы должны извлечь подстроку, например, используя регулярное выражение вроде этого:

def match = ( env.SELECTED_IMAGE_TAG =~ /\{targetSuffix=(.*?), sourceSuffix=(.*?)\}/ )
if( match ) {
    def selectedTargetSuffix = match[0][1]
    def selectedImageTag = imageTags.find { it.targetSuffix == selectedTargetSuffix }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...