groovy 我可以在Jenkins pipeline中动态创建stage,并按顺序运行吗?

u5rb5r59  于 8个月前  发布在  Jenkins
关注(0)|答案(2)|浏览(100)

我有一个从map变量动态创建stages的函数,它们并行运行。一切都很好。但是当我需要从map变量中动态创建stage时,我也想运行这个函数,但是要按顺序

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")
        }
      }
    }
 }
}

我尽了一切努力,但它还是福尔斯。我希望我可以使用函数来并行地或顺序地(一个接一个地)通过传递参数到函数来动态地创建阶段。

eqfvzcg8

eqfvzcg81#

我不能编辑其他答案,但基本上每个答案,就像这对Map不起作用一样,你应该这样做(考虑到你的阶段Map是map_steps):

map_steps.each{ key,val ->
 val()
}

对于一个小的背景检查,你存储的是Closures,所以要启动它们,你需要把它们作为一个函数调用。
Iterokun的最后一句话非常重要。

qvtsj1bj

qvtsj1bj2#

而不是

return(map_steps);

item.each {
        map_steps[it.key]()
    }

你可以在Map上做.each,但是Map没有顺序,所以阶段的顺序可能与你期望的不同。
编辑:对不起,我的错,没有注意到item是一个Map。修正了答案。

相关问题