JenkinsのPipelineでjobを並列実行させる
About
Jenkinsを弄ってみたので記事にしてみました。
この記事は「LITALICO Engineers Advent Calendar 2020」の13日目の記事です。
LITALICO Engineers Advent Calendar 2020 https://qiita.com/advent-calendar/2020/litalico
これは何か
私が関わっているプロダクトではJenkinsを使ってデプロイを行う仕組みになっていました。ただデプロイ時間が非常にかかっていてリリース作業のコストが高い状況になっています。そこでデプロイ時間の短縮を進めるなかでPipelineを調べたので簡単にまとめておきます。
ちなみにデプロイ時間短縮に関しては現時点では半分くらいまで短縮できるようになっています。(詳細はまた別の機会に…)
Jenkins pipelineについて
Jenkinsではpipelineという形で複数の実行ステップなどを管理することができます。こちらを使うと依存関係がある一連の処理をまとめて管理することができたりします。
最終形
pipelineから実行対象のjobをselectboxで指定しつつ、dateというparameterを個別jobに渡しています。
個別jobのパラメータは下記のようになります
build内容は下記のようにしています。
echo "date: $date" echo "test: $test"
それでは少しずつ見ていきます。
pipelineからjobを呼び出す
pipelineから各jobを呼び出すには下記のようにbuild jobを指定することで呼び出すことが可能です。この際にparametersを指定することでpipelineで入力したものを各jobに渡すことができます。
pipeline { agent any stages { stage('job1') { steps { build job: 'test-job1', parameters: [ [$class: 'StringParameterValue', name: "date", value: "$date"] ] } } } }
checkがついたjobのみ実行する
下記のような記載になります。
pipeline { agent any stages { stage('job1') { when { expression { return job1.toBoolean() } } steps { build job: 'test-job1', parameters: [ [$class: 'StringParameterValue', name: "date", value: "$date"] ] } } } }
今回はpipelineのselectboxでチェックが付いたもののみjobを実行させたかったので、上記のようにwhenを使って条件分岐をさせています。
pipelineからジョブを並列に呼び出す
最後にjobを並列実行させる書き方にしてみます。
pipeline { agent any stages { stage("parallel") { parallel { stage('job1') { when { expression { return job1.toBoolean() } } steps { build job: 'test-job1', parameters: [ [$class: 'StringParameterValue', name: "date", value: "$date"] ] } } stage('job2') { when { expression { return job2.toBoolean() } } steps { build job: 'test-job2', parameters: [ [$class: 'StringParameterValue', name: "date", value: "$date"] ] } } stage('job3') { when { expression { return job3.toBoolean() } } steps { build job: 'test-job3', parameters: [ [$class: 'StringParameterValue', name: "date", value: "$date"] ] } } } } } }
上記のようにparallelを使うことで並列実行できました。ただしExecutorが余ってないとqueueに入ってしまうので注意しましょう。
まとめ
まだまだ改善の余地があるのでいろいろ直していきたいと思います。
弊社ではSREも募集しておりますので、ご興味ある方は下記のページや私に個別にご連絡いただければと思います。