为什么会出现这个错误? “没有这样的属性:类的条目:java.util.Map”

时间:2018-12-20 21:03:34

标签: jenkins groovy jenkins-pipeline

我正在跟踪JENKINS-44085中的一个示例,该注释发出了关于创建几乎到T的阶段映射的非常底层的注释,但是执行代码时我得到了

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

这是我的代码。变量“管道”在其他地方定义,并且有效。

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 :(得分:2)

这似乎是詹金斯管道中的bug。一个related one在2.158版之后已修复。因此,升级Jenkins应该可以解决此问题。

答案 1 :(得分:0)

不是直接的答案,但是我将其作为变通方法,用于调用函数。

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
}

仍然困扰着我,为什么原始代码不起作用。

答案 2 :(得分:0)

正如@Christian所说,这似乎是一个已关闭的错误,但我们仍然是2.89.3,因此对于无法立即升级的任何人,解决方法是将地图条目转换为{{ 1}} list 对。为了演示,下面是一个简单的代码,可以重现OP的错误:

WebClient

这是解决方法之一,

[key, value]

请注意,['1':1].findAll { it.value > 0 }.collectEntries { it } 适用于['1':1].collect { [it.key, it.value] }.findAll { it[1] > 0 }.collectEntries { it } 对,因此无需将其转换回任何其他形式。