Mir*_*rek 6 parallel-processing jenkins jenkins-groovy jenkins-pipeline
我正在使用这样的东西来并行运行测试:
stage('Test') {
steps {
script {
testing_closures = [one: { print("staring one"); sleep 10; print("finishing one") },
two: { print("staring two"); sleep 10; print("finishing two") },
three: { print("staring three"); sleep 10; print("finishing three") },
four: { print("staring four"); sleep 10; print("finishing four") },
five: { print("staring five"); sleep 10; print("finishing five") },
six: { print("staring six"); sleep 10; print("finishing six") }]
parallel(testing_closures)
}
}
}
Run Code Online (Sandbox Code Playgroud)
主要目标是限制那些关闭 - 我不希望它们中的所有六个同时运行 - 一次只有3个.我希望能够运行另一个这样的构建,它也将运行所有这些闭包,但同时只运行3个.
我正在考虑使用节点 - 即在节点{}块中包装每个闭包:
one: { node { print("staring one"); sleep 10; print("finishing one") } }
Run Code Online (Sandbox Code Playgroud)
只要我使用主节点并将执行程序限制为4(主要作业为1,节点{}并发步骤为3),就可以正常工作.
不幸的是,我需要主节点执行器可用于其他作业(以及相关作业的其他构建),所以我不能限制它们.
我能想到的唯一解决方案是以下列方式使用可锁定资源:
通过LockableResourcesManager::createResourceWithLabel()构建唯一标签动态创建3个可锁定资源
在所有闭包中按标签锁定它们
关闭将等待彼此完成,当时只有3个将运行.
即使有一种删除资源的方法,这个解决方案看起来很脏,并添加了不必要的资源,如果出现故障可能无法清理.
那么 - 我如何实现目标?有没有办法节流平行步骤?
您绝对可以使用LockableResources Plugin来做到这一点,只需为给定标签定义 3 个资源,并将quantity每个关键步骤所需的资源设置为 1。(否则它将需要给定标签中的所有资源)
node('slave') {
def execs = [:]
execs[1] = {
lock(label: 'Win81x64Pool', quantity: 1, variable: "MY_VAR") {
println "LOCKED=" + env.MY_VAR
sleep(3)
}
}
execs[2] = {
lock(label: 'Win81x64Pool', quantity: 1, variable: "MY_VAR") {
println "LOCKED=" + env.MY_VAR
sleep(3)
}
}
execs[3] = {
lock(label: 'Win81x64Pool', quantity: 1, variable: "YOUR_VAR") {
println "LOCKED=" + env.YOUR_VAR
sleep(3)
}
}
parallel execs
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |