动态定义声明性jenkins管道中的并行步骤

时间:2018-04-10 12:40:02

标签: jenkins groovy jenkins-pipeline jenkins-declarative-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') {

虽然步骤是在阶段'运行'中定义的。无论如何,我想要实现的是一组动态定义的并行执行的函数。

2 个答案:

答案 0 :(得分:11)

如果要将动态并行块与声明性管道脚本一起使用,则必须对Jenkinsfile应用两个更改:

  1. 您必须将running_set定义为Map,如["task 1": { somefunc()}, "task 2": { somefunc2() }] - 此地图中的键用作并行阶段名称
  2. 您必须在running_set
  3. 内传递parallelscript {}方法

    以下是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中的样子:

    enter image description here

答案 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
                    ])
                }
            }
        }
    }
}