猫でもわかるWebプログラミング

試行錯誤しながらエンジニア(プログラマー)として働く猫のブログ。技術的な話や、働き方の話、読書録とか、試行錯誤している日常の話。

Jenkinsのとてもイケてない点3つ

f:id:yoshiki_utakata:20200702010238p:plain

Jenkinsとは

CIツール兼ジョブスケジューラーです。

GitHubのブランチがプッシュやプルリクエストをトリガーにテストを実行したり、定期的に結合テストを実行したりに使えます。

イケてないポイント

私はずっとCIツール、ジョブスケジューラーとして Jenkins を使ってきました。(CircleCI や GitHub Actions も使ってますが)

Jenkins結構好きだし、結構詳しいのですが、以下の3つのポイントはアカンなって思ってます。CIツール選定の参考にしてください。

  • サーバー構築が大変
  • プラグイン管理がだるい
  • Slack通知の仕組みがイケてない

サーバー構築・インストールが大変

CircleCIやGitHub Actionsは、クラウド版があったり、追加のサーバー構築が必要でなかったりするので、簡単に使い始められます。

一方 Jenkins はクラウド版は無いので自前でサーバーを用意しなければなりません。その時点で面倒です。

CIの実行環境も自分で整備しなければなりません。CircleCI や GitHub Actions には「いい感じにnpmが使えるLinux」などが予め用意されていますが、Jenkinsでは自分で用意したり設定しなければなりません。かなりだるいです。

また、Jenkinsはプラグインに依存している部分が大きいので、サーバー構築したあとプラグインをいくつかインストールする必要があるのですが、このプラグインのインストールまで自動化しようとするとかなりしんどいです。

Jenkinsを1から構築したり、Jenkinsのバージョンアップなどのために再構築するのはかなりしんどいです。

プラグインの管理がだるい

Jenkinsはプラグインが無いと使い物にならないので、プラグインをいっぱい入れることになります。

しかし、プラグインの依存関係があり、いい感じに依存チェックしてくれる仕組みは無いので、適当にプラグインを更新すると簡単に壊れます

これがかなりダルいので、大抵はプラグインのバージョンを上げること無く放置プレイになるのですが、バージョンが古い時に警告がデカデカとでてきてうざいです。なんとかしてください。

Slack通知などの仕組みがイケてない

Jenkinsでは、ジョブの内容をgroovyという言語で書くのですが、ジョブが失敗した時にSlackへ通知、というCIやジョブスケジューラーでは一般的 of 一般的な事をするのも結構だるいです。

表示する文言を組み立てるとか、WebhookのURL叩いてSlackにpostするとか、割と自分でやらなければいけません。もっと簡単に書けてほしいです。

結論

CIツールは CircleCI や GitHub Actions のほうがいいと思います。YAML を使っているツールは、YAMLの表現力の低さゆえ使いづらいことが多い印象ですが *1、CIはYAMLで充分だなって思います。

一方で、ジョブスケジューラー、つまり定期的にジョブを実行させたい場合は Jenkins も良いなと思っています。CircleCI や GitHub Actions は CI ツールであってジョブスケジューラーではないなって感じです。

*1:Ansible とか Swagger とか