Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
并联节流jenkins管_Jenkins_Groovy_Jenkins Pipeline - Fatal编程技术网

并联节流jenkins管

并联节流jenkins管,jenkins,groovy,jenkins-pipeline,Jenkins,Groovy,Jenkins Pipeline,我看到了这条消息,代码如下 在 如果我已经有一个包含50个项目的分支图,但是我想一次并行5个项目,那么我需要如何修改这段代码? 我的代码在一个名为branchs的变量中已经有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

我看到了这条消息,代码如下 在

如果我已经有一个包含50个项目的分支图,但是我想一次并行5个项目,那么我需要如何修改这段代码? 我的代码在一个名为branchs的变量中已经有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
}
//将多个项目放入队列,以允许该数量的分支运行

对于(int i=0;i这个问题有点老了,但对我来说,这个问题昨天也是相关的。在某些情况下,您的Jenkins作业可能在Jenkins上较轻,但在其他一些系统上较高,因此您希望对该系统进行限制。在我看来,使用每个构建代理的最大执行者不是正确的方法,因为如果您的Jenkins集群扩展,您将我得调整一下

要回答您的问题,您可能需要这样做:

  • 创建带有数字索引“0”、“1”等的分支映射
  • 在粘贴的代码的try块中有如下内容:
    build(my_branchs[name])
至少我以前也是这样使用这个解决方案的。但后来有人指出了一个更好的解决方案。我还在你提到的Jira罚单中对这个更简单的解决方案进行了评论。它需要可锁定的资源插件:

  • 转到:
    http:///configure
    并添加带有标签“XYZ”的X个可锁定资源
  • 在代码中使用以下内容:
def测试=[:] 对于(…){ def test_num=“$i” 测试[“$test_num”]={ 锁定(标签:“XYZ”,数量:1,变量:“锁定”){ println“锁定的资源:${env.Locked}” 生成(作业:jobName,等待:true,参数:parameters) } } } 平行测试
这样做的好处是,您可以在不同的作业中使用它。在我们的例子中,不同的作业在XYZ上有一个负载,因此使用这些全局锁非常方便。

通常的Jenkins方法(至少在我看来)将限制每个生成代理的执行者数量。这将向生成队列添加50个子作业,然后在生成代理可用时立即处理这些子作业。也许这也适用于您。我认为并行任务的数量=执行者的数量。我有一个生成代理,因此我希望限制并发运行的数量。但它似乎没有这样做。在声明性管道中,它似乎试图并行运行映射中的任务,而不管我定义了多少执行者。我是否可以使用队列或堆栈传递到并行?啊,我想现在我看到了你的“问题”。您没有使用
节点
步骤分配执行器。不确定,我想说您应该这样做。但可能不是为难以置信的500个任务分配执行器?是否要在多个生成代理上运行此操作?来自的信号灯应该可以工作。还有一个示例: def tests = [:] for (...) { def test_num="$i" tests["$test_num"] = { lock(label: "XYZ", quantity: 1, variable: "LOCKED") { println "Locked resource: ${env.LOCKED}" build(job: jobName, wait: true, parameters: parameters) } } } parallel tests