我需要并行地为构建运行一组任务,构建的任务是动态的,它可能会改变。我需要一些帮助来实现下面的细节。
我将在xml中动态生成构建的任务详细信息,其中包含必须并行/串行执行哪些任务的信息
示例:
说有一个版本A.
哪个具有以下任务和执行顺序,第一个任务1必须执行下一个任务2,任务3将并行执行,接下来是任务4
任务1
TASK2,TASK3
task4
这些细节将在动态生成的xml中,如何使用管道插件解析该xml并相应地调度任务。我需要一些想法开始。
答案 0 :(得分:15)
您可以使用Groovy从工作区(readFile
)读取文件,然后生成包含不同闭包的地图,类似于以下内容:
parallel(
task2: {
node {
unstash('my-workspace')
sh('...')
}
},
task3: {
node {
unstash('my-workspace')
sh('...')
}
}
}
为了生成这样的数据结构,您只需使用Groovy中的XML解析通过先前读取的文件内容迭代读取的任务数据。
有时候,我昨天发表了关于管道的讨论并包含了非常相似的例子(presentation,幻灯片34ff。)。相反,我从另一个命令输出中读取了“任务”列表。可以找到完整的代码here(我避免在此处粘贴所有这些内容,而是引用此异地资源)。
魔术位的种类如下:
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)
}
}
}