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 とか