生成并行分支导致作业挂起
Generating parallel branches causes job to hang
我是 groovy 和工作流插件的新手,所以这也许是显而易见的。 Q1: 我尝试 运行 在一个视图下并行读取作业。我喜欢这样:
jenkins = Hudson.instance
parallel getBranches()
@NonCPS def getBranches() {
def jobBranches = [:]
for (int i = 0; i < getJobs().size(); i++) {
jobBranches["branch_${i}"] = {
build job : getJobs()[i]
}
}
return jobBranches
}
@NonCPS def getJobs() {
def jobArray = []
jenkins.instance.getView("view_A").items.each{jobArray.add(it.displayName)}
return jobArray
}
我得到了:
但是如果我这样写:
jenkins = Hudson.instance
def jobBranches = [:]
for (int i = 0; i < getJobs().size(); i++) {
jobBranches["branch_${i}"] = {
build job : getJobs()[i]
}
}
parallel jobBranches
@NonCPS def getJobs() {
def jobArray = []
jenkins.instance.getView("view_A").items.each{jobArray.add(it.displayName)}
return jobArray
}
然后我得到了这样的东西:
我做错了什么?或者有没有其他方法可以完成同样的事情。
Q2: 顺便说一句,如果有三个工作,比如j1、j2、j3。 j1 和 j2 先并行执行,当其中一个完成时,将执行 j3。那么该怎么做呢?
我明白为什么了。
for (int i = 0; i < getJobs().size(); i++) {
def j=i
jobBranches["branch_${i}"] = {
build job : getJobs()[j]
}
那就可以了!
我是 groovy 和工作流插件的新手,所以这也许是显而易见的。 Q1: 我尝试 运行 在一个视图下并行读取作业。我喜欢这样:
jenkins = Hudson.instance
parallel getBranches()
@NonCPS def getBranches() {
def jobBranches = [:]
for (int i = 0; i < getJobs().size(); i++) {
jobBranches["branch_${i}"] = {
build job : getJobs()[i]
}
}
return jobBranches
}
@NonCPS def getJobs() {
def jobArray = []
jenkins.instance.getView("view_A").items.each{jobArray.add(it.displayName)}
return jobArray
}
我得到了:
但是如果我这样写:
jenkins = Hudson.instance
def jobBranches = [:]
for (int i = 0; i < getJobs().size(); i++) {
jobBranches["branch_${i}"] = {
build job : getJobs()[i]
}
}
parallel jobBranches
@NonCPS def getJobs() {
def jobArray = []
jenkins.instance.getView("view_A").items.each{jobArray.add(it.displayName)}
return jobArray
}
然后我得到了这样的东西:
我做错了什么?或者有没有其他方法可以完成同样的事情。
Q2: 顺便说一句,如果有三个工作,比如j1、j2、j3。 j1 和 j2 先并行执行,当其中一个完成时,将执行 j3。那么该怎么做呢?
我明白为什么了。
for (int i = 0; i < getJobs().size(); i++) {
def j=i
jobBranches["branch_${i}"] = {
build job : getJobs()[j]
}
那就可以了!