我有一个Jenkins管道,在这里我创建了一些动态的steps,我想知道如何在parallel中运行所有的步骤。
由于我使用script将字符串拆分为迭代数组,所以parallel似乎在抱怨,因为它必须在stage标记之间。
这里是一个代码示例
stages {
stage('BuildAll') {
script {
parallel {
"${names}".split(",").each { name->
stage(name) {
sh "env | grep -i NODE_NAME"
}
}
}
}
}
}发布于 2022-04-28 07:26:48
由于在parallel指令中运行的是script函数,所以必须对并行函数使用脚本化的语法:
获取从分支名称到闭包的映射和一个可选参数failFast,该参数>将在任何其他分支发生故障时终止所有分支: 并行firstBranch:{ //做某事},secondBranch:{ //做其他的事情},failFast: true=false false
因此,您可以使用collectEntries方法对列表进行迭代,并生成传递给并行函数的Map。类似于:
stages {
stage('BuildAll') {
steps {
script {
parallel names.split(',').collectEntries { name ->
["Execution ${name}": { // Map key is the branch name
// Following code will be executed in parallel for each branch
stage(name) {
sh "env | grep -i NODE_NAME"
}
}]
}
}
}
}
}另一种选择是定义映射,然后调用并行:
stages {
stage('BuildAll') {
steps {
script {
def executions = names.split(',').collectEntries { name ->
["Execution ${name}": {
stage(name) {
sh "env | grep -i NODE_NAME"
}
}]
}
parallel executions
}
}
}
}https://stackoverflow.com/questions/72032637
复制相似问题