Jenkins ジョブはどう管理すると良いのだろうか
Jenkins のジョブが増えてきて、段々と管理工数がかかってきてつらみが出ている。
Pipeline はもう少し・プラグインの対応状況がマチマチ…
Pipeline (Jenkinsfile) という記法により、GUI でジョブをポチポチするよりも見通しが良くなったかな、とは思うものの、Jenkins 専用のスクリプトの書き方を覚えないといけないのがつらい。シェルスクリプトや Windows バッチでこう書くアレはどうやるの?というのをイチイチ調べている感じがする。
それぞれの Jenkins プラグインが Pipeline 記法に対応しているかどうかもマチマチで、このプラグインだけ Pipeline に対応していないから仕方なくフリースタイルジョブで…みたいなことも多い。
そうこうしているとジョブごとに作り方がバラつき、全部同じような構成で作って見通しを良くすることができない。
Jenkins プラグインは横連携が微妙
Jenkins プラグインをバカスカ入れていっても、うまい具合に併用が効かなかったりする。こっちのプラグイン向けにこの設定を入れたけど、あっちのプラグインではコレが参照できないから、同じような設定を入れておいて…みたいになりがち。プラグインごとに Credentials 情報を用意したりしていると、結局は GUI の設定画面に全部詰め込んだだけで、あんまり変わっていない気がする。
全部シェルスクリプトで完結させるのが良さそうだと思ってきた
そんなワケで、最近は、Git リポジトリから処理を行うためのシェルスクリプトを落としてきて、ほぼ全ての処理をシェルスクリプト上で完結させるジョブを立てるのが楽かな?と思ってきた。このレベルなら、Pipeline で書いても、フリースタイルジョブで書いてもあまり変わらない気がする。
イメージ的には以下のようなジョブ構成が良いかな〜という。
- 全体設定
- 古いビルドの破棄
- ソースコード管理
git push
をポーリングしたい Git リポジトリがあれば指定する
- ビルド・トリガ
git push
に反応させたい場合はリモートへの Push に連動するようにしておく- 定期実行
- ビルド環境
- ワークスペースの削除
- Node.js などの PATH を通す (シェルスクリプト内で nvm などで行うよりは楽かも)
- ビルド
- 「シェルの実行」でシェルスクリプトを
git clone
してきて、sh ./script.sh
で実行する
- 「シェルの実行」でシェルスクリプトを
- ビルド後の処理
- ジョブの結果ステータスや説明文を変更するような作業があれば指定する
こんな形なら、大体の場合はシェルスクリプトにほとんど全ての処理を委譲でき、Jenkins プラグインの流行り廃りに影響を受けなくなるし、実装する言語がシェルスクリプト一つになるから楽になる。
シェルスクリプトはシェルスクリプトで管理しやすいかというと…
しかし今度は、シェルスクリプトがそんなに保守しやすいモノでもないかもしれない?というところが気になる。みんなが読み書きしやすくないとなかなか保守してもらえない。
環境・外部ライブラリへの依存はもう少し増えるが、Node.js スクリプトなんかで書くのは JavaScripter 的にも良いかも?とか思わなかったり思ったり。
皆さんはどうしているのだろう?
他の人はこうしたジョブ問題にどのように対応しているのか、調べてみた。
- 参考 : もしJenkinsでちょっとずつ違う100のジョブを管理しなくてはいけなくなったら - knjnameのブログ
- Job DSL Plugin というプラグインで、Groovy ベースの DSL を書くと、似たようなジョブ定義 (XML) をまとめて生成できる。
- 参考 : Jenkinsを使う理由 - knjnameのブログ
- Jenkins の良いところ : Java 1つで動き、フリーで、WebAPI がしっかりしていて、泥臭いやり方もできてどうにでもなる自由度
- 悩むところ : 「これはJenkinsのプラグインでやるべきか、ビルドスクリプトを作成してやるべきか?」まさにコレ。あと「ビルドパイプラインの組み方」。バラす粒度が分からん。
- 参考 : Jenkinsの使い勝手をよくするための見直し6点 | Developers.IO
- 1作業1ジョブ、としていたのを結合してリファクタリングする。
- Git 管理しているシェルスクリプトを拾ってきて実行するやり方にする
- 参考 : Jenkins 再入門
- 大量に作られたジョブをどのように整理していくか。
みんなも似たようなポイントで困ってはいるみたいで、やっぱり最終的には「頑張るしかない」のがつらみ。ウ〜〜ン、やはり銀の弾丸はないのう…。