You need to enable JavaScript to run this app. 如何为pipeline添加matrix段实现多节点运行循环任务
优惠活动
大模型
产品
解决方案
定价
更多

如何为pipeline添加matrix段实现多节点运行循环任务

Pipeline 4节点调度改造实现方案

核心调整逻辑

原写法的核心问题是所有项目遍历生成的子stage全部嵌套在单Test stage的script执行上下文内,即便指定节点,所有任务也会挤在同一执行器上串行运行,无法实现跨节点分流。改造后通过任务轮询分配、并行分支绑定节点的方式,完全匹配需要的调度规则:

  • 按顺序将项目列表均匀分配到4个执行节点:第1个项目AD分配给节点1,第2个CD分配给节点2,第3个DC分配给节点3,第4个DISP_A分配给节点4,后续项目按取模规则循环分配,直到所有项目遍历完成
  • 4个节点同时并行执行各自分到的任务队列,无资源抢占
  • 每个节点内部的任务按列表顺序串行执行,避免单节点执行器过载

改造后可直接运行的Pipeline代码

pipeline {
    agent none
    environment {
        // 替换为你环境中4个执行节点的实际标签/名称
        EXEC_NODES = ['node-slave-1', 'node-slave-2', 'node-slave-3', 'node-slave-4']
        // 原有完整测试项目列表,无需改动顺序
        TEST_PROJECTS = ['AD', 'CD', 'DC', 'DISP_A', 'DISP_PROC', 'EGI', 'FD', 'FLT', 'FMS_C', 'IFF', 'liblO', 'libNGC', 'libSC', 'MISCMP_MP', 'MISCMP_GP', 'NAV_MGR', 'RADALT', 'SYS', 'SYSIO15', 'SYSIO42', 'SYSRED', 'TACAN', 'VOR_ILS', 'VPA', 'WAAS', 'WCA']
    }
    stages {
        stage ('Parallel Test Scheduling') {
            steps {
                script {
                    // 初始化节点-任务映射关系
                    def nodeTaskMap = [:]
                    EXEC_NODES.each { nodeName ->
                        nodeTaskMap[nodeName] = []
                    }
                    // 按取模规则轮询分配项目,实现负载均衡
                    TEST_PROJECTS.eachWithIndex { project, idx ->
                        def targetNode = EXEC_NODES[idx % EXEC_NODES.size()]
                        nodeTaskMap[targetNode] << project
                    }

                    // 动态构建并行执行分支
                    def parallelBranches = [:]
                    nodeTaskMap.each { nodeName, taskList ->
                        parallelBranches[nodeName] = {
                            // 绑定当前分支的专属执行节点
                            node(nodeName) {
                                // 串行执行当前节点分到的所有测试任务
                                taskList.each { project ->
                                    stage("${nodeName} - ${project}") {
                                        echo "Running ${project}"
                                        build job: "UH60Job", 
                                        parameters: [
                                            string(name: "TEST_PROJECT", value: project), 
                                            string(name: "SCADE_SUITE_TEST_ACTION", value: "all"), 
                                            string(name: "VIEW_ROOT", value: "myview")
                                        ] 
                                    }
                                }
                            }
                        }
                    }
                    // 启动所有并行分支
                    parallel parallelBranches
                }
            }
        }
    }
}

注意事项

  • 代码中的EXEC_NODES数组需要替换为你Jenkins环境内实际的节点标签,否则会出现节点找不到的调度报错
  • 27个测试项目分配到4个节点后,每个节点平均承担6-7个项目的执行量,调度逻辑完全符合初始分配预期
  • 如果后续需要扩展节点数量,只需要在EXEC_NODES数组里追加新节点标签即可,分配逻辑会自动适配,不需要额外修改循环代码

内容的提问来源于stack exchange,提问作者Franktank24

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.30 23:06:03