hoge-hogeoのひきこもごも

インフラエンジニアだけど形を持ったインフラを触ったことがない人の徒然

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の管理→ノードの管理→ノードの歯車 f:id:hoge-hogeo:20180926123110p:plain

これを1にしてみる。 f:id:hoge-hogeo:20180926123146p:plain

実行してみるジョブはこんな感じ


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中の下流ジョブ f:id:hoge-hogeo:20180926124800p:plain

利用可能なエグゼキューターとは。。。

とりあえず思い当たるのは、ノード実行数を1つだけにしたやつ、戻してみる。 f:id:hoge-hogeo:20180926124926p:plain

動いた。pipelineと下流ジョブで、それぞれエグゼキューターが必要になるらしい。

f:id:hoge-hogeo:20180926130158p:plain

ということは、下流ジョブを複数起動したい場合は、pipline分 + 下流ジョブ並列実行分必要になるのか。。。


Pluginに頼ってみる

kyon-mm.hatenablog.com

Jenkins上からプラグインを探してみたけどなかった、ので変わりに下記のプラグインを入れてみた。

f:id:hoge-hogeo:20180926150335p:plain


パターンマッチで実行中のジョブがあったら、自分をブロックするようなので、雑に「.*」で試してみよう。 f:id:hoge-hogeo:20180926150603p:plain

Bulk-Deploy-Account-for-WhiteとBulk-Deploy-API-for-Whiteを同時実行してみる。

キューに片方が入って、もう片方はビルドが実行中になった。

f:id:hoge-hogeo:20180926151003p:plain

オンマウスで待ってるぜコメントが見れた。

f:id:hoge-hogeo:20180926151009p:plain

詰まることなく、2つのパイプラインジョブが完了した。

f:id:hoge-hogeo:20180926151240p:plain

一旦、これで排他的な動きは実現できた。。。