生成并行分支会导致作业挂起

时间:2016-01-11 02:20:04

标签: jenkins groovy jenkins-workflow

我是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
}

我得到了:

enter image description here

但如果我这样写的话:

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
}

然后我得到了这样的东西:

enter image description here

我做错了什么?还是有另一种方法来完成同样的事情。

Q2: BTW,如果有三个作业,比如j1,j2,j3。 j1和j2首先并行执行,当其中一个完成时,将执行j3。那怎么办呢?

1 个答案:

答案 0 :(得分:0)

我弄明白了为什么。

for (int i = 0; i < getJobs().size(); i++) {
    def j=i 
    jobBranches["branch_${i}"] = {
        build job : getJobs()[j]
    }

然后它会起作用!

相关问题