根据此答案,您可以构建作业和参数列表,然后并行运行作业:
stage('testing') {
def jobs = [:]
[1,2,3,4,5].each{
i -> jobs["Test${i}"] = {
build job: 'Test',
parameters: [string(name: 'theparam', value: "${i}")],
quietPeriod: 2
}
}
parallel jobs
}
它使用数字作为名称,但您可以使用任意名称。
您可以变得更复杂并将要发布的作业列表下载到文件中并运行文件中命名的作业:
stage ('download release spec') {
dir('${WORKSPACE}') {
sh 'curl -LO https://my.server.com/path/$MASTER_RELEASE/jobs.txt'
}
}
stage('run jobs in spec') {
dir('${WORKSPACE}') {
// read our one line of jobs to run and split it into an array of jobs to run
def fileData = readFile('jobs.txt')
def names = fileData.tokenize( ',' )
// short hand for creating an empty map
def jobs = [:]
// https://stackoverflow.com/a/51306175/329496
names.each{
i -> jobs["${i}"] = {
println "parallel build job: $i"
build job: "${i}"
}
}
parallel jobs
}
}
第一个代码片段显示了如何将参数传递给构建。Groovy 有一些用于合并列表的隐藏功能,例如转置,可以轻松地将“jobs.txt”和“params.txt”合并到一个列表中,您可以运行该列表.each
以提取作业名称及其参数。您可以将一些 sed、awk 或 python 放入第一阶段,以计算结构化发布文档中的所有文件。这样,您的构建可以下载格式良好的发布文档并将其转换为一堆作业和发布参数以运行。