Jenkinsで並列(パラレル)処理する方法
ども、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の画面でみると、パラレル処理されていることがわかります。
注意点
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
- Jenkins blue ocean
https://jenkins.io/projects/blueocean/