現在のソフトウェア開発は一昔前と比べると、以下のような特徴があります。
- リモートワークが多くなり開発拠点が分散
- 開発環境も個人によって差異がある
- リリース頻度とスピードが速い
- APIを使った他サービスとのインテグレーションが多い
- アプリでは動作環境がデバイス種類だけある
このような中でソフトウェアの品質を保証するためにCI(継続的インテグレーション)が必須になっている組織・企業が多くあります。そのためCIツールの選定、他CIツールへのリプレイスは開発するソフトウェアに大きく影響します。
この記事ではCIツールの鉄板と言えるJenkinsを評価して行きます。
プラグインの多さ
Jenkinsのプラグイン一覧をご確認ください(https://wiki.jenkins-ci.org/display/JENKINS/Plugins#Plugins-Pluginsbytopic)。これらがJenkinsで最初から利用できるプラグインです。言語ではJavaに関連したプラグインが多いですが、それ以外の言語の.NetやRubyも多くあります。
GitやSubversionなどリポジトリのサポート、TracやFogBugz、JIRAなどプロジェクト管理ツールとの連携もプラグインで出来ます。
もし独自に必要なプラグインがあれば、プラグインを自作して自身の環境内で利用できます。Jenkinsには高い柔軟性があります。
(Photo by:Dirk Haun)
オンプレミス
社内ネットワーク内に立ち上げたサーバーで利用できるのが特徴です。セキュリティ上の利用や監査の都合で社外のサーバーや外部サービスを利用できない場合、Jenkinsを立ち上げて自分たちで運用するのが向いています。
インターネットに接続できる環境であればインストールも比較的容易です。
オープンソース
JenkinsはMITライセンスで公開されており、さまざまな利用方法に関してライセンスによる制約を受けません。ただし、これはどのようなミドルウェアであろうとソフトウェアであっても当然の話になりますが、プラグインなどの拡張可能な機能に関しては別途ライセンスが指定されている場合があります。
そのためJenkins本体とそのプラグインを含めたソフトウェアをバンドルして配布する場合は、ライセンスの確認が求められます。
一般的な使い方である、CIツールとして利用する分にはライセンス上の問題はありません。
ドキュメント
JenkinsのWiki(https://wiki.jenkins-ci.org/display/JENKINS/Home)は充実しています。またJenkinsは前身となるHudsonから含めて寿命が長いのと、利用者が多いこともあってブログやStackOverFlowなどの公式以外のドキュメントが豊富です。
メインとなっている開発者が日本人である影響か、とてもメジャーである事も大きいですが他CIツールと比べて導入部分に関する日本語ドキュメント量がとても多い印象です。
オープンソースではドキュメント不足に困る事が多いのですが、Jenkinsでは調べ事をしていてもあまり困りません。
分散化
開発が大規模するとビルドに時間がかかるようになります。そして何よりも自動テストに時間がかかるようになります。
単体テストであれば許容できる時間で収まりますが、ミドルウェアなどを含めた結合テスト、UIを含めた受け入れテストまで自動化して行うとなるとビルドが1時間かかっても終わらない現象が起こります。
1本道で順に処理を行うと時間がかかり遅い問題を解消するため、Jenkinsにはノードにジョブを分けて分散ビルドを行う機能があります。また複数サーバーに分散してビルドを短くすることも出来ます。
(Photo by:Dirk Haun)
他ツールとの連携
プラグインを利用すると外部ツール、Slackなどと簡単に連携ができます。GitHubのwebhookを使った連携もできます。
例えばビルド完了の通知をトリガーに外部ツールで次のアクションを起こすなど、Jenkins以外のツールに繋いでインテグレーションを継続する仕組みを柔軟に実現できます。
全体を通しての評価
Jenkinsには欠点らしい欠点が特にありません。オンプレミスで満足に利用できるCIツールとして人気です。
シンプルにもできれば、複雑にも出来ます。全部Jenkinsで解決するようにも出来れば、他ツールと連携させて部分的に(例えばビルドだけ)Jenkinsを使うこともできます。
Jenkinsはオンプレミスのため自分たちで運用する必要があります。規模や環境に合わせて運用が複雑化するとこの点が負担になります。
開発が大規模化すると速度的な問題が出てきますが、分散させる事である程度の解決ができます。他、例えばテスト環境の初期化に時間がかかる場合にはDockerを利用するなど、独自の対処が求められます。
CIツールは自前かSaaSか
運用が複雑になる問題を解決する方法の1つに、SaaSのような環境が整備されている外部サービスの利用があります。
ただ、サービスによっては動作が安定しない場合やサービス自体の継続が不透明な状況にある場合があります。
もし今利用している外部のCIサービスのから以下のようなことを言われたら、例え無料だとしても利用規約を見直して損賠賠償請求の訴訟を起こす勢いでクレームを入れると思います。
- サーバーが不調で3日間停止します、停止していました。
- サービスの方針転換で今まで使えた機能が来週から使えなくなります。
- 動作が遅いけどサーバー増強するまで1ヶ月待ってください。
自前であれば運用の複雑さというストレスはあっても、トラブル時に対処が自力での対処が可能です。
もし外部サービスを利用していてトラブルになったとき、サポートを得られないと困り果ててしまいます。
そのため信用できる外部サービスであれば良いですが、そうではない場合は自前で運用した方がリスクを小さく抑えることができます。
本ブログは、Git / Subversionのクラウド型ホスティングサービス「tracpath(トラックパス)」を提供している株式会社オープングルーヴが運営しています。
エンタープライズ向け Git / Subversion 導入や DevOps による開発の効率化を検討している法人様必見!
「tracpath(トラックパス)」は、企業内の情報システム部門や、ソフトウェア開発・アプリケーション開発チームに対して、開発の効率化を支援し、品質向上を実現します。
さらに、システム運用の効率化・自動化支援サービスも提供しています。
”つくる情熱を支えるサービス”を提供し、まるで専属のインフラエンジニアのように、あなたのチームを支えていきます。
No Comments