gpt4 book ai didi

jenkins - 在管道中并行节流 Jenkins

转载 作者:行者123 更新时间:2023-12-03 19:36:38 25 4
gpt4 key购买 nike

我用下面的代码看到了这条消息
JENKINS-44085 中。

如果我已经有一个包含 50 个项目的分支 map ,但我想一次将它们并行 5 个,我需要如何修改此代码?
我的代码已经在名为分支的 var 中有一个包含 50 个项目的映射。

// put a number of items into the queue to allow that number of branches to run
for (int i=0;i<MAX_CONCURRENT;i++) {
latch.offer("$i")
}

for (int i=0; i < 500; i++) {
def name = "$i"
branches[name] = {
def thing = null
// this will not allow proceeding until there is something in the queue.
waitUntil {
thing = latch.pollFirst();
return thing != null;
}
try {
echo "Hello from $name"
sleep time: 5, unit: 'SECONDS'
echo "Goodbye from $name"
}
finally {
// put something back into the queue to allow others to proceed
latch.offer(thing)
}
}
}

timestamps {
parallel branches
}

最佳答案

这个问题有点老了,但对我来说,昨天这个问题也很重要。在某些情况下,您的 Jenkins 工作在 Jenkins 上可能很少,但在其他系统上可能很高,因此您希望限制该系统的工作。在我看来,为每个构建代理使用最大执行器并不是正确的方法,因为如果您的 Jenkins 集群扩展,您将不得不调整内容。

要回答您的问题,您可能想要执行以下操作:

  • 创建一个带有数字索引“0”、“1”等的分支映射。
  • 在您粘贴的代码的 try 块中,有如下内容: build(my_branches[name])

  • 至少这就是我之前使用相同解决方法的方式。但是后来有人在工作中指出了一个更好的解决方案。我还在您提到的 Jira 票证中评论了这个更简单的解决方案。它需要 Lockable Resources Plugin: https://wiki.jenkins.io/display/JENKINS/Lockable+Resources+Plugin
  • 转到:http://<your Jenkins URL>/configure 并添加标签为“XYZ”的 X 个可锁定资源。
  • 在您的代码中使用:

  • def 测试 = [:]
    为了 (...) {
    def test_num="$i"
    测试[“$test_num”] = {
    锁(标签:“XYZ”,数量:1,变量:“锁定”){
    println "锁定资源:${env.LOCKED}"
    构建(作业:作业名称,等待:真,参数:参数)
    }
    }
    }
    平行测试

    这样做的好处是您可以在不同的工作中使用它。在我们的例子中,不同的作业在 XYZ 上有负载,因此拥有这些全局锁非常方便。

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

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