我尝试并行化动态定义的一组函数,如下所示:
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') {
虽然步骤是在阶段'运行'中定义的。无论如何,我想要实现的是一组动态定义的并行执行的函数。
答案 0 :(得分:11)
如果要将动态并行块与声明性管道脚本一起使用,则必须对Jenkinsfile应用两个更改:
running_set
定义为Map
,如["task 1": { somefunc()}, "task 2": { somefunc2() }]
- 此地图中的键用作并行阶段名称running_set
块parallel
到script {}
方法
醇>
以下是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中的样子:
答案 1 :(得分:-1)
这不是显而易见的。但是Szymon的方法可能非常简单。
pipeline {
agent none
stages{
stage('Run') {
steps {
script {
parallel([
'parallelTask1_Name': {
any code you like
},
'parallelTask2_Name': {
any other code you like
},
... etc
])
}
}
}
}
}