动态并行流水线
Dynamic parallel pipeline
我有一个 Jenkins DSL 管道,我在其中创建一些动态 steps
,我想知道如何 运行 parallel
中的所有步骤。
由于我使用 script
将字符串拆分为一个迭代数组,parallel
似乎在抱怨,因为它必须在 stage
标记之间
这是一个代码示例
stages {
stage('BuildAll') {
script {
parallel {
"${names}".split(",").each { name->
stage(name) {
sh "env | grep -i NODE_NAME"
}
}
}
}
}
}
因为您是 运行 script
指令中的 parallel
函数,所以您必须使用并行函数的脚本语法:
Takes a map from branch names to closures and an optional argument failFast which > will terminate all branches upon a failure in any other branch:
parallel firstBranch: {
// do something
}, secondBranch: {
// do something else
},
failFast: true|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
}
}
}
}
我有一个 Jenkins DSL 管道,我在其中创建一些动态 steps
,我想知道如何 运行 parallel
中的所有步骤。
由于我使用 script
将字符串拆分为一个迭代数组,parallel
似乎在抱怨,因为它必须在 stage
标记之间
这是一个代码示例
stages {
stage('BuildAll') {
script {
parallel {
"${names}".split(",").each { name->
stage(name) {
sh "env | grep -i NODE_NAME"
}
}
}
}
}
}
因为您是 运行 script
指令中的 parallel
函数,所以您必须使用并行函数的脚本语法:
Takes a map from branch names to closures and an optional argument failFast which > will terminate all branches upon a failure in any other branch:
parallel firstBranch: { // do something }, secondBranch: { // do something else }, failFast: true|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
}
}
}
}