在声明性詹金斯管道中动态定义并行步骤
Dynamically defining parallel steps in declarative jenkins pipeline
我尝试按如下方式并行化动态定义的函数集:
def somefunc() {
echo 'echo1'
}
def somefunc2() {
echo 'echo2'
}
running_set = [
{ somefunc() },
{ somefunc2() }
]
pipeline {
agent none
stages{
stage('Run') {
steps {
parallel(running_set)
}
}
}
}
我最终得到的是:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 17: No "steps" or "parallel" to execute within stage "Run" @ line 17, column 9.
stage('Run') {
虽然步骤是在 'Run' 阶段定义的。无论如何,我想要实现的 运行 是一组动态定义的并行执行的函数。
如果您想将动态并行块与声明性管道脚本一起使用,您必须对 Jenkinsfile 进行两项更改:
- 您必须将
running_set
定义为类似于 ["task 1": { somefunc()}, "task 2": { somefunc2() }]
的 Map
- 此映射中的键用作并行阶段名称
- 您必须将
running_set
传递给 script {}
块内的 parallel
方法
这是更新后的 Jenkinsfile 的样子:
def somefunc() {
echo 'echo1'
}
def somefunc2() {
echo 'echo2'
}
running_set = [
"task1": {
somefunc()
},
"task2": {
somefunc2()
}
]
pipeline {
agent none
stages{
stage('Run') {
steps {
script {
parallel(running_set)
}
}
}
}
}
这是它在 Blue Ocean 中的样子 UI:
不明显。但是Szymon的方法可以很直接。
pipeline {
agent none
stages{
stage('Run') {
steps {
script {
parallel([
'parallelTask1_Name': {
any code you like
},
'parallelTask2_Name': {
any other code you like
},
... etc
])
}
}
}
}
}
我尝试按如下方式并行化动态定义的函数集:
def somefunc() {
echo 'echo1'
}
def somefunc2() {
echo 'echo2'
}
running_set = [
{ somefunc() },
{ somefunc2() }
]
pipeline {
agent none
stages{
stage('Run') {
steps {
parallel(running_set)
}
}
}
}
我最终得到的是:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 17: No "steps" or "parallel" to execute within stage "Run" @ line 17, column 9.
stage('Run') {
虽然步骤是在 'Run' 阶段定义的。无论如何,我想要实现的 运行 是一组动态定义的并行执行的函数。
如果您想将动态并行块与声明性管道脚本一起使用,您必须对 Jenkinsfile 进行两项更改:
- 您必须将
running_set
定义为类似于["task 1": { somefunc()}, "task 2": { somefunc2() }]
的Map
- 此映射中的键用作并行阶段名称 - 您必须将
running_set
传递给script {}
块内的parallel
方法
这是更新后的 Jenkinsfile 的样子:
def somefunc() {
echo 'echo1'
}
def somefunc2() {
echo 'echo2'
}
running_set = [
"task1": {
somefunc()
},
"task2": {
somefunc2()
}
]
pipeline {
agent none
stages{
stage('Run') {
steps {
script {
parallel(running_set)
}
}
}
}
}
这是它在 Blue Ocean 中的样子 UI:
不明显。但是Szymon的方法可以很直接。
pipeline {
agent none
stages{
stage('Run') {
steps {
script {
parallel([
'parallelTask1_Name': {
any code you like
},
'parallelTask2_Name': {
any other code you like
},
... etc
])
}
}
}
}
}