使用jenkins管道插件实现动态并行构建的想法

Gou*_*nda 5 jenkins jenkins-plugins jenkins-pipeline

我需要并行地为构建运行一组任务,构建的任务是动态的,它可能会改变.我需要一些帮助来实现下面的细节.

我将在xml中动态生成构建的任务细节,其中包含必须并行/串行执行哪些任务的信息

例:

说有一个构建A.

其中有下面的任务和执行顺序,第一个任务1必须执行下一个任务2,任务3将并行执行,接下来是任务4

TASK1
TASK2,TASK3
task4

这些细节将在动态生成的xml中,如何使用管道插件解析该xml并相应地调度任务.我需要一些想法开始.

Ste*_*ing 15

您可以使用Groovy从工作空间(readFile)中读取文件,然后生成包含不同闭包的映射,类似于以下内容:

parallel(
  task2: {
    node {
      unstash('my-workspace')
      sh('...')
    }
  },
  task3: {
    node {
      unstash('my-workspace')
      sh('...')
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

为了生成这样的数据结构,您只需使用Groovy中的XML解析通过先前读取的文件内容迭代读取的任务数据.

有时候,我昨天发表了关于管道的讨论,其中包括非常相似的例子(演示文稿,幻灯片34ff).相反,我从另一个命令输出中读取了"任务"列表.完整的代码可以在这里找到(我避免在这里粘贴所有这些,而是​​引用这个异地资源).

魔术位的种类如下:

def parallelConverge(ArrayList<String> instanceNames) {
    def parallelNodes = [:]

    for (int i = 0; i < instanceNames.size(); i++) {
        def instanceName = instanceNames.get(i)
        parallelNodes[instanceName] = this.getNodeForInstance(instanceName)
    }

    parallel parallelNodes
}

def Closure getNodeForInstance(String instanceName) {
    return {
        // this node (one per instance) is later executed in parallel
        node {
            // restore workspace
            unstash('my-workspace')

            sh('kitchen test --destroy always ' + instanceName)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)