在声明式Jenkins流水线中动态定义并行步骤

10

我尝试按如下方式并行执行动态定义的函数集:

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个回答

24

如果你想在声明性流水线脚本中使用动态并行块,你需要对Jenkinsfile做两个更改:

  1. running_set定义为像["task 1": { somefunc()}, "task 2": { somefunc2() }]这样的Map - 此映射中的键用作并行阶段名称
  2. 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)
                }
            }
        }
    }
}

以下是在蓝色海洋UI中的效果:

enter image description here


2

这并不是显而易见的。但Szymon的方法可以非常简单明了。

pipeline {
    agent none
    stages{
        stage('Run') {
            steps {
                script {
                    parallel([
                        'parallelTask1_Name': {
                            any code you like
                        },
                        'parallelTask2_Name': {
                            any other code you like
                        },
                        ... etc
                    ])
                }
            }
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接