我有一个从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")
}
}
}
}
}
我尽了一切努力,但它还是福尔斯。我希望我可以使用函数来并行地或顺序地(一个接一个地)通过传递参数到函数来动态地创建阶段。
2条答案
按热度按时间eqfvzcg81#
我不能编辑其他答案,但基本上每个答案,就像这对Map不起作用一样,你应该这样做(考虑到你的阶段Map是
map_steps
):对于一个小的背景检查,你存储的是Closures,所以要启动它们,你需要把它们作为一个函数调用。
Iterokun的最后一句话非常重要。
qvtsj1bj2#
而不是
做
你可以在Map上做
.each
,但是Map没有顺序,所以阶段的顺序可能与你期望的不同。编辑:对不起,我的错,没有注意到
item
是一个Map。修正了答案。