我有一个函数可以从地图变量动态创建阶段,并且它们并行运行。一切都很好。但当我需要从地图变量创建动态阶段但按顺序时,我也想运行此函数。
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")
}
}
}
}
}
我尽了一切努力,但还是失败了。我希望我可以通过将参数传递给函数来使用函数来并行或按顺序(一一)动态创建阶段。
而不是
return(map_steps);
做
item.each {
map_steps[it]()
}
您可以在地图上执行
.each
,但地图没有顺序,因此阶段的顺序可能与您期望的不同。