You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins声明式Pipeline如何实现外层map并行内层map顺序执行

Jenkins流水线并行执行实现方案

需求梳理

  • outer_map1存储<字符串, 待执行命令>键值对,所有条目需并行执行
  • outer_map2存储<字符串, 内层map>键值对,内层map为<字符串, 待执行命令>结构;要求outer_map2的顶层条目按顺序执行,单个顶层条目对应的内层map所有命令并行执行
  • 核心目标:实现outer_map1整体执行逻辑和outer_map2整体执行逻辑的并行,支持单stage实现或拆分为独立stage并行两种形式

现有代码问题

原有写法中parallel outer_map1执行完成后,才会进入后续outer_map2.each的遍历逻辑,两个逻辑块串行运行在stage主线程,无法实现并行效果。

方案1:单stage内实现(推荐)

Jenkins的parallel关键字支持传入多个独立闭包作为并行分支,只需将两个逻辑块分别封装为独立分支传入即可,无需拆分stage:

stage('test'){
    parallel(
        // 分支1:全量并行执行outer_map1
        'run_outer_map1': {
            parallel outer_map1
        },
        // 分支2:顺序执行outer_map2顶层条目,每个内层map并行
        'run_outer_map2': {
            outer_map2.each{ key, value ->
                echo "当前执行outer_map2节点:${key}"
                parallel value()
            }
        }
    )
}

执行逻辑说明:

  • 流水线进入该stage后,两个顶层分支立即同时启动
  • run_outer_map1分支直接并行启动outer_map1下的所有待执行命令
  • run_outer_map2分支按map遍历顺序逐个处理顶层条目,上一个内层map的所有命令执行完成后,才会启动下一个内层map的并行任务
  • 两个顶层分支完全独立并行,互不阻塞

方案2:拆分为独立stage并行

如果需要拆分为两个独立stage实现,可直接将stage作为并行分支传入parallel,脚本式流水线写法如下:

parallel(
    'outer1_stage': {
        stage('执行outer_map1') {
            parallel outer_map1
        }
    },
    'outer2_stage': {
        stage('顺序执行outer_map2') {
            outer_map2.each{ key, value ->
                stage("outer_map2节点:${key}") {
                    parallel value()
                }
            }
        }
    }
)

声明式流水线对应写法:

pipeline {
    agent any
    stages {
        stage('并行任务总阶段') {
            parallel {
                stage('执行outer_map1') {
                    steps {
                        script {
                            parallel outer_map1
                        }
                    }
                }
                stage('顺序执行outer_map2') {
                    steps {
                        script {
                            outer_map2.each{ key, value ->
                                stage("outer_map2节点:${key}") {
                                    parallel value()
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

配置说明

  • parallel传入的map键名对应流水线UI上展示的分支/阶段名称,可根据业务语义自定义
  • 如需避免单个分支失败导致所有并行分支终止,可在parallel参数中添加failFast: false
  • 并行分支内尽量避免读写共享全局变量,防止出现并发冲突问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 04:27:14