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

Jenkins Pipeline如何实现动态Stage并行/顺序执行切换?

Jenkins Pipeline 动态生成顺序/并行 Stage 解决方案

问题分析

你当前的代码在mode为false时仅返回存储Stage闭包的Map,但Jenkins不会自动执行这些闭包,这就是顺序模式失效的核心原因。要实现顺序执行,需要主动遍历Map并逐个调用每个闭包。

修改后的完整代码

Map item_1 = [
  'Data_1' : 'sdfdfd',
  'Data_2' : 'dfdfdfd'
]

// 生成GitCheckout Stage的函数,支持并行/顺序双模式
def gitcheckoutStages(item, gitCredentials, mode) {
  def map_steps = [:]
  item.each { key, value ->
    println "$key: $value"
    map_steps["$key"] = {
      stage ("Checkout on the tag in the repo $key") {
        dir("$key") {
          utils.checkoutSCM("$value", env.GIT_ANDROID_BRANCH, "$gitCredentials")
          env."$key" = sh(script: "git tag --list --sort=-taggerdate ${params.VERSION} | head -n 1", returnStdout: true).trim()
          sh "git tag"
          sh "echo ${env."$key"}"
        }
        if (env."$key" == "") {
          error("Can't find the tag with selected pattern")
        }
        if (params.VERSION ==~ /.*SNAP/) {
          env.DEBUG_PARAMETER = "Debug"
        } else {
          env.DEBUG_PARAMETER = "Release"
        }
        dir("$key") {
          sh "git checkout ${env."$key"}"
          sh "git log -1"
        }
      }
    }
  }
  
  if (mode == "true") {
    // 并行执行模式:直接调用Jenkins parallel方法
    parallel(map_steps)
  } else {
    // 顺序执行模式:遍历闭包Map,逐个执行Stage
    map_steps.each { name, stageClosure ->
      stageClosure()
    }
  }
}

pipeline {
  agent {
      label 'android-executor'
  }
  options {
      disableConcurrentBuilds()
      timestamps()
      ansiColor('xterm')
  }
  post {
    always {
      script {
        utils.cleanUpWorkspace(env.WORKSPACE)
      }
    }
  }
  stages {
    stage ("Git checkout for all repos") {
      steps {
        script {
          // 传入"false"启用顺序执行,传入"true"启用并行执行
          gitcheckoutStages(item_1, gitCredentials, "false")
        }
      }
    }
 }
}

关键修改说明

  • 顺序执行逻辑:在mode为false时,不再返回闭包Map,而是通过map_steps.each遍历并调用每个Stage闭包,确保Stage按Map的插入顺序逐个执行(Groovy 2.5+默认保留Map插入顺序)。
  • 简化条件判断:移除冗余的字符串强制转换,直接用mode == "true"进行模式判断,代码更简洁。

使用方式

调用gitcheckoutStages函数时,第三个参数传入"true"则并行执行所有动态Stage;传入"false"则按item_1中定义的顺序逐个执行Stage。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:15:00