基于具有声明式管道的内核数,并行运行Jenkins步骤

问题描述 投票:0回答:1

我正在将Jenkins与声明性管道一起使用。我有一台Jenkins机器,它有8个内核并行运行任意数量的步骤(例如20个)。问题是太多任务并行运行,并且某些测试由于超时问题而失败。

我需要一种方法让Jenkins并行运行20个测试,但一次只能运行8个。这样,我将给它较长的运行步骤,然后是更快的步骤。一旦完成较长的步骤之一,它应立即开始下一个步骤,而其他七个仍在运行。像这样,但一次只有8个:

            steps {
                parallel(
                    runtest1:
                    {
                        dostep()
                    },
                    runtest2:
                    {
                        dostep()
                    },
                    runtest3: 
                    {
                        dostep()
                    },
                    runtest4: 
                    {
                        dostep()
                    },
                    runtest5:
                    {
                        dostep()
                    },
                    runtest6:
                    {
                        dostep()
                    },
                    runtest7:
                    {
                        dostep()
                    },
                    runtest8:
                    {
                        dostep()
                    },
                    runtest9:
                    {
                        dostep()
                    }
                    runtest10:
                    {
                        dostep()
                    },
                    runtest11:
                    {
                        dostep()
                    },
                    runtest12:
                    {
                        dostep()
                    },
                    runtest13: 
                    {
                        dostep()
                    },
                    runtest14: 
                    {
                        dostep()
                    },
                    runtest15:
                    {
                        dostep()
                    },
                    runtest16:
                    {
                        dostep()
                    },
                    runtest17:
                    {
                        dostep()
                    },
                    runtest18:
                    {
                        dostep()
                    },
                    runtest19:
                    {
                        dostep()
                    },
                    runtest20:
                    {
                        dostep()
                    }
                )

            }
        }

今天使用parallel(),它将仅运行所有测试,然后对所有内容完成操作后,将进入下一阶段,在该阶段将运行下一个并行步骤。

jenkins parallel-processing pipeline declarative
1个回答
0
投票

您的代码将尝试在同一代理上并行运行所有这些测试。那可能不是您想要的。您可以尝试在不同的代理上并行运行整个阶段:https://jenkins.io/blog/2017/09/25/declarative-1/

stages {
    stage('Run Tests') {
        parallel {
            stage('Test 1') {
                agent { label "8-core-agent" }
                steps {
                    doTheTest()
                }
            }
            stage('Test 2') {
                agent { label "8-core-agent" }
                steps {
                    doTheTest()
                }
            }
        }
...

如果仅在主代理或单个代理上运行构建,则可以使用上述方法将测试分为多个阶段:stage('test 1-8') ... stage('test 9-16')

© www.soinside.com 2019 - 2024. All rights reserved.