我正在跟踪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
}
那是为什么?
答案 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 }
对,因此无需将其转换回任何其他形式。