我可以在 Jenkins 管道中动态创建阶段,并按顺序运行吗?

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

我有一个函数可以从地图变量动态创建阶段,并且它们并行运行。一切都很好。但当我需要从地图变量创建动态阶段但按顺序时,我也想运行此函数。

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

// Function for generate GitCheckout stages
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") {
    parallel(map_steps)
  } else {
    return(map_steps);
  }
}

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 {
          gitcheckoutStages(item_1, gitCredentials, "false")
        }
      }
    }
 }
}

我尽了一切努力,但还是失败了。我希望我可以通过将参数传递给函数来使用函数来并行或按顺序(一一)动态创建阶段。

jenkins groovy jenkins-pipeline jenkins-groovy
1个回答
0
投票

而不是

    return(map_steps);

    item.each {
        map_steps[it]()
    }

您可以在地图上执行

.each
,但地图没有顺序,因此阶段的顺序可能与您期望的不同。

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