web-dev-qa-db-ja.com

宣言的なジェンキンスパイプラインでの並列ステップの動的な定義

次のように、動的に定義された関数のセットを並列化しようとします。

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') {

ステップは「実行」ステージ内で定義されますが。とにかく、実行を実現したいのは、動的に定義された関数のセットで、並列に実行します。

6
pbn

宣言型パイプラインスクリプトで動的並列ブロックを使用する場合は、Jenkinsfileに2つの変更を適用する必要があります。

  1. _running_set_をMapのように["task 1": { somefunc()}, "task 2": { somefunc2() }]として定義する必要があります-このマップのキーは並列ステージ名として使用されます
  2. _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では次のようになります。

enter image description here

18
Szymon Stepniak