jenkins ジョブの排他実行したい話
概要
アプリケーションのデプロイに3つのジョブを使っている。
- PHPアプリをビルドする@ビルドサーバ
- ビルドしたアプリを対象サーバのDocumentRootへscpする
- 対象サーバのDocumentRootを切り替えてリリースする
資源
資源 | モノ | 備考 |
---|---|---|
EC2 | amzn2-ami-hvm-2.0.20180810-x86_64-gp2 (ami-08847abae18baa040) | |
MW | Jenkins ver. 2.140 |
検証
ノードを1つにしてみる
とりあえず、1ジョブだけ実行させられるのか確認してみよう。
これを採用すると、常に1ジョブしか実行できないとても使いづらいjenkinsになるけど。
jenkinsの管理→ノードの管理→ノードの歯車
これを1にしてみる。
実行してみるジョブはこんな感じ
PipelineのBulk-Deploy-API-for-WhiteがJob3つを実行するだけ
Job種 | |||
---|---|---|---|
Pipeline | Bulk-Deploy-API-for-White | ||
Job | Deploy-API-for-White | ||
Job | Release-API-to-Server-from-HUB-for-White | ||
Job | Change_SymbolicLink_API_for_White |
待てど暮らせど始まらない、pipeline中の下流ジョブ
利用可能なエグゼキューターとは。。。
とりあえず思い当たるのは、ノード実行数を1つだけにしたやつ、戻してみる。
動いた。pipelineと下流ジョブで、それぞれエグゼキューターが必要になるらしい。
ということは、下流ジョブを複数起動したい場合は、pipline分 + 下流ジョブ並列実行分必要になるのか。。。
Pluginに頼ってみる
Jenkins上からプラグインを探してみたけどなかった、ので変わりに下記のプラグインを入れてみた。
パターンマッチで実行中のジョブがあったら、自分をブロックするようなので、雑に「.*」で試してみよう。
Bulk-Deploy-Account-for-WhiteとBulk-Deploy-API-for-Whiteを同時実行してみる。
キューに片方が入って、もう片方はビルドが実行中になった。
オンマウスで待ってるぜコメントが見れた。
詰まることなく、2つのパイプラインジョブが完了した。
一旦、これで排他的な動きは実現できた。。。