Murga

個人的に言いたいコト・主張・気持ち。

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 的にも良いかも?とか思わなかったり思ったり。

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

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

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

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

[改訂第3版]Jenkins実践入門 ――ビルド・テスト・デプロイを自動化する技術 (WEB+DB PRESS plus)

  • 作者: 佐藤聖規,和田貴久,新井雄介,米沢弘樹,山岸啓,岩成祐樹,川口耕介
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/05/24
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る