GitHub
Jenkins
Parallel
blueocean
JenkinsPipeline

Pipeline(Jenkinsfile) で並列(パラレル)処理を実行する。

jenkins-yoko.png

ども、keita69sawada です。

Jenkinsを使ってDockerイメージをすべて作り直したいことがあります。
例えば、
1.公式OSイメージ + セキュリティパッチ = My OSイメージ
  1.2.My OSイメージ + Tomcat(ミドルウェア) = My Tomcatイメージ
  1.3.My OSイメージ + Postgres(ミドルウェア) = My Postgresイメージ
       :
のように、公式のセキュリティパッチがアップデートした場合、
すべてミドルウェアを作り直す必要があります。
Dockerイメージを1つ1つシリアル処理で作成すると時間がかかるし、どうにかならないかな?

じゃ、「並列(パラレル)処理を試してみよう!」と
ウニウニしたがこの記事です。

対象読者

  • Jenkinsを使ってCIをしたい人。
  • Jenkinsfileを使って並列(パラレル)処理したい人。

前提条件

  • GitHubなどでJenkinsfileを管理・連携できる人。

手順

1. Jenkinsfileを作成

parallelブロックはstageの先頭に記載しましょう。
:warning: parallelブロックが先頭でない場合エラーになります。※詳細は下の注意点参照

Jenkinsfile
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                parallel (
                    "tomcat" : {
                        echo 'done'
                    },
                    "postgress" : {
                        echo 'done'
                    }
                )
            }
        }  
    }
}

2. GitHubなどのjenkinsfileを更新し、JenkinsのJobを実行する。

3. 実行結果

Jenkins Blue Oceanの画面でみると、パラレル処理されていることがわかります。

image.png

注意点

parallelブロックが先頭でない場合エラーになります。

エラー内容
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 7: Invalid step "parallel" used - not allowed in this context - The parallel step can only be used as the only top-level step in a stages step block @ line 7, column 17.
                   parallel (
                   ^
NG
pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo "NG"  // ★★★ parallelブロックはStepsの先頭でないとNG!!
                parallel (
                    "tomcat" : {
                        echo 'done'
                    },
                    "postgres" : {
                        echo 'done'
                    }
                )
            }
        }  
    }
}

参考URL