Почему эта ошибка?Msgstr "Нет такого свойства: запись для класса: java.util.Map" - PullRequest
0 голосов
/ 21 декабря 2018

Я следую примеру из JENKINS-44085 выдает очень дельные комментарии о создании карты этапов почти на Т, но когда я выполняю свой код, я получаю

No such property: Entry for class: java.util.Map

Вот мой код.Переменная 'pipe' определена где-то еще и является действительной.

def generateStage(String job, String targetVersion,
                  String rootVersion, Integer sleepTime=0) {
    return {
        stage("Deploying: ${job}") {
              sleep sleepTime
              pipeline.executeDeploymentPipeline(job,
                                                 targetVersion,
                                                 rootVersion)
        }
    }
}

def deployProcs(targetVersion, rootVersion) {
    int sleepTime = 0
    def procs = ["proc-proc", "proc-proc-high"]
    def parallelStagesMap = procs.collectEntries {
        ["${it}" : generateStage(it, targetVersion, rootVersion, sleepTime)]
        sleepTime += 5
    }
    parallel parallelStagesMap
}

Почему это так?

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Кажется, это ошибка в конвейерах Jenkins.* связанный с был исправлен после версии 2.158.Так что обновление Jenkins должно решить эту проблему.

0 голосов
/ 23 мая 2019

В отличие от того, на что указал @Christian, это все еще ошибка на 1.176.1 со всеми последними плагинами.Обходной путь - преобразовать записи карты в пару [key, value] list .Чтобы продемонстрировать, вот простой код, который может воспроизвести ошибку OP:

['1':1].findAll { it.value > 0 }.collectEntries { it }

Вот код с обходным путем,

['1':1].collect { [it.key, it.value] }.findAll { it[1] > 0 }.collectEntries { it }

Обратите внимание, что .collectEntries() работает с list пары просто отлично, поэтому не нужно преобразовывать их обратно в любую другую форму.

0 голосов
/ 04 января 2019

Не прямой ответ, но я сделал это как обходной путь для вызывающей функции.

def deployProcs(targetVersion, rootVersion) {
    int sleepTime = 0
    def procs = ["proc-proc", "proc-proc-high"]
    Map parallelStagesMap = new TreeMap()
    procs.each {
        parallelStagesMap.put[it, generateStage(it, targetVersion, rootVersion, sleepTime))
        sleepTime += 5
    }
    parallel parallelStagesMap
}

Все еще беспокоит меня, почему оригинальный код не работает.

...