Cover Image for Jenkinsで並列(パラレル)処理する方法
Jenkinsで並列(パラレル)処理する方法

jenkins-yoko.png

ども、k69 です。

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の先頭に記載しましょう。

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

© 2022 k69

本サイトを通じて、たくさんの人がプログラミングに興味を持ち、 これがキッカケでモノづくりの楽しさに触れることができれば幸せです!