我正在使用这样的东西来并行运行测试:
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)
}
}
}
主要目标是限制这些关闭 - 我不希望所有六个同时运行 - 一次只运行 3 个。而且我希望能够运行另一个构建,它也将运行所有这些闭包,但只能同时运行 3 个。
我正在考虑为此使用节点 - 即将每个闭包包装在 node{} 块中:
one: { node { print("staring one"); sleep 10; print("finishing one") } }
只要我使用主节点并将执行程序限制为 4 个(主作业 1 个,节点{} 并发步骤 3 个),就可以正常工作。
不幸的是,我需要主节点执行器可用于其他作业(以及相关作业的其他构建),因此我无法限制它们。
我能想到的唯一解决方案是以下列方式使用可锁定资源:
LockableResourcesManager::createResourceWithLabel()
使用 build-unique 标签动态创建 3 个可锁定资源在所有封盖中按标签锁定它们
关闭将等待对方完成,当时只有 3 个正在运行。
...现在我被困住了。我找不到任何删除资源的方法。我只发现了一个非常相似的问题的开放错误。编辑:我为它创建了改进请求。
即使有删除资源的方法,这个解决方案看起来很脏,并且添加了不必要的资源,如果出现故障,这些资源可能无法清理。
那么 - 我如何实现我的目标?有没有办法限制并行步骤?