Jenkins ジョブはどう管理すると良いのだろうか

Jenkins のジョブが増えてきて、段々と管理工数がかかってきてつらみが出ている。

Pipeline はもう少し・プラグインの対応状況がマチマチ…

Pipeline (Jenkinsfile) という記法により、GUI でジョブをポチポチするよりも見通しが良くなったかな、とは思うものの、Jenkins 専用のスクリプトの書き方を覚えないといけないのがつらい。シェルスクリプトや Windows バッチでこう書くアレはどうやるの?というのをイチイチ調べている感じがする。

それぞれの Jenkins プラグインが Pipeline 記法に対応しているかどうかもマチマチで、このプラグインだけ Pipeline に対応していないから仕方なくフリースタイルジョブで…みたいなことも多い。

そうこうしているとジョブごとに作り方がバラつき、全部同じような構成で作って見通しを良くすることができない。

Jenkins プラグインは横連携が微妙

Jenkins プラグインをバカスカ入れていっても、うまい具合に併用が効かなかったりする。こっちのプラグイン向けにこの設定を入れたけど、あっちのプラグインではコレが参照できないから、同じような設定を入れておいて…みたいになりがち。プラグインごとに Credentials 情報を用意したりしていると、結局は GUI の設定画面に全部詰め込んだだけで、あんまり変わっていない気がする。

全部シェルスクリプトで完結させるのが良さそうだと思ってきた

そんなワケで、最近は、Git リポジトリから処理を行うためのシェルスクリプトを落としてきて、ほぼ全ての処理をシェルスクリプト上で完結させるジョブを立てるのが楽かな?と思ってきた。このレベルなら、Pipeline で書いても、フリースタイルジョブで書いてもあまり変わらない気がする。

イメージ的には以下のようなジョブ構成が良いかな〜という。

こんな形なら、大体の場合はシェルスクリプトにほとんど全ての処理を委譲でき、Jenkins プラグインの流行り廃りに影響を受けなくなるし、実装する言語がシェルスクリプト一つになるから楽になる。

シェルスクリプトはシェルスクリプトで管理しやすいかというと…

しかし今度は、シェルスクリプトがそんなに保守しやすいモノでもないかもしれない?というところが気になる。みんなが読み書きしやすくないとなかなか保守してもらえない。

環境・外部ライブラリへの依存はもう少し増えるが、Node.js スクリプトなんかで書くのは JavaScripter 的にも良いかも?とか思わなかったり思ったり。

皆さんはどうしているのだろう?

他の人はこうしたジョブ問題にどのように対応しているのか、調べてみた。

みんなも似たようなポイントで困ってはいるみたいで、やっぱり最終的には「頑張るしかない」のがつらみ。ウ〜〜ン、やはり銀の弾丸はないのう…。