gpt4 book ai didi

jenkins - Jenkins 管道脚本中的节流并行步骤

转载 作者:行者123 更新时间:2023-12-04 16:05:25 24 4
gpt4 key购买 nike

我正在使用这样的东西来并行运行测试:

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() 动态创建 3 个可锁定资源带有构建唯一标签
  • 用标签将它们锁在所有封口
  • 关闭将等待彼此完成,并且当时只有 3 个正在运行。
  • ......现在我被困住了。我找不到任何删除资源的方法。我只找到了一个 open bug for quite similar issue .编辑:我创建了 improvement request for it .

  • 即使有删除资源的方法,这个解决方案看起来也很脏,并添加了不必要的资源,如果出现故障,这些资源可能无法清理。

    那么 - 我如何实现我的目标?有没有办法限制并行步骤?

    最佳答案

    你绝对可以用 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
    }

    关于jenkins - Jenkins 管道脚本中的节流并行步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45633398/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com