如何在 jenkinsfile 中一次循环 4 个 20 个项目的 运行
How to run for loop in batch of 4 for 20 items at once in jenkinsfile
我必须在 groovy 中 运行 for 循环处理 40 个项目,但我希望 运行 它并行处理 4 个项目,然后是下一批,依此类推。我知道 jenkinsfile 中的并行部署,但它会同时触发所有 40 个。
def i = 0
mslist.collate(4).each{
build job: 'deploy', parameters: [string(name: 'PROJECT', value: "${it[i]}"), string(name: 'ENVIRONMENT', value: params.ENVIRONMENT)]
i=i+1
}
我的更新代码:
stages {
stage ('Parallel Deployments') {
steps {
script {
def m = rc.ic()
m = m.collect { "${it}" }
println "$m"
m.collate(4).each{
def deployments = [:]
batch.each {
deployments[it] = {
build job: 'jb', parameters: [string(name: 'pt', value: it), string(name: 'pl', value: params.gh), string(name: 'dc', value: params.nb)]
}
}
parallel deployments
}
deployments["failFast"] = false
}
}
}
}
您可以这样做:
def items = (1..40).collect { "item-${it}" }
items.collate(4).each { List batch ->
// batch is now a list of 4 items, do something with it here
}
使用 groovy Iterable.collate 方法将项目拆分为四个项目的批次并循环遍历批次。
如果您真的想像使用多线程那样“并行”执行此操作,那就是另一个问题了。
可以这样做:
node {
def items = (1..40).collect { "item-${it}" }
items.collate(4).each { List batch ->
def n=[:]
batch.each {
n[it] = {
stage(it) {
build job: 'x', parameters: [ string( name: "it", value : it) ]
}
}
}
parallel n
}
}
工作:x Jenkinsfile 内容
node {
echo "Hello from Pipeline x"
print params
}
这将同时调用 4 个作业 运行。确保在 Jenkins 上配置了超过 4 个执行程序。
我必须在 groovy 中 运行 for 循环处理 40 个项目,但我希望 运行 它并行处理 4 个项目,然后是下一批,依此类推。我知道 jenkinsfile 中的并行部署,但它会同时触发所有 40 个。
def i = 0
mslist.collate(4).each{
build job: 'deploy', parameters: [string(name: 'PROJECT', value: "${it[i]}"), string(name: 'ENVIRONMENT', value: params.ENVIRONMENT)]
i=i+1
}
我的更新代码:
stages {
stage ('Parallel Deployments') {
steps {
script {
def m = rc.ic()
m = m.collect { "${it}" }
println "$m"
m.collate(4).each{
def deployments = [:]
batch.each {
deployments[it] = {
build job: 'jb', parameters: [string(name: 'pt', value: it), string(name: 'pl', value: params.gh), string(name: 'dc', value: params.nb)]
}
}
parallel deployments
}
deployments["failFast"] = false
}
}
}
}
您可以这样做:
def items = (1..40).collect { "item-${it}" }
items.collate(4).each { List batch ->
// batch is now a list of 4 items, do something with it here
}
使用 groovy Iterable.collate 方法将项目拆分为四个项目的批次并循环遍历批次。
如果您真的想像使用多线程那样“并行”执行此操作,那就是另一个问题了。
可以这样做:
node {
def items = (1..40).collect { "item-${it}" }
items.collate(4).each { List batch ->
def n=[:]
batch.each {
n[it] = {
stage(it) {
build job: 'x', parameters: [ string( name: "it", value : it) ]
}
}
}
parallel n
}
}
工作:x Jenkinsfile 内容
node {
echo "Hello from Pipeline x"
print params
}
这将同时调用 4 个作业 运行。确保在 Jenkins 上配置了超过 4 个执行程序。