Jenkinsのよくある課題とCIツール比較


CI(継続的インテグレーション)をはじめるうえで、Jenkinsは世界中で人気のあるオープンソフトウェアです。オープンソフトウェアのため、気軽に運用を開始することができ、必要に応じて環境を増やしていくことも容易です。一方で、Jenkinsの運用を進めていくうちに、「環境が複雑になり管理できない」、「パフォーマンスやセキュリティに不安がある」などさまざまな課題を感じる開発者は少なくありません。

とくにJenkinsを利用するチームやプロジェクトを増やしていく際には「どのようにJenkins環境を構築、管理していくか」を考えることがより重要になります。無計画にJenkins環境を拡大してしまうと、管理が難しい不安定な環境ができあがってしまい、パフォーマンスや安定性の低下、セキュリティリスクなどのさまざまな問題を抱えることになります。

よくある課題を大まかに分けると、モノリシックJenkins課題(単一のJenkins環境の肥大化)と野良Jenkins課題(複数のJenkins環境の乱立)のふたつに分類することができます。それぞれの課題と対策について、わかりやすく解説していきます。


モノリシックJenkinsの課題

モノリシックなシステムとは、要素が分割されていない全体が一体となったシステムのことを指します。モノリシックJenkins (つまりひとつのJenkinsに集約された環境)を運用していても、少数のメンバーのみが利用するのであればあまり大きな問題にはなりません。しかし、利用者が増えていき複数のチームが同じ環境を使うようになると様々な問題が顕在化していきます。

大量なジョブが日常的に実行されている場合、パフォーマンス面で問題になる場合があります。最悪のケースではJenkinsコントローラーが利用できるマシンリソースをオーバーし、Jenkinsが異常終了するという事も起こり得ます。ある便利なプラグインを導入しようとした場合、特定のプラグインを利用しているチームに意図しない影響を与えることもあります。また大量の開発者やプロジェクトが1つのJenkinsに依存している場合、システムにダウンタイムが発生するとその影響は計り知れません。セキュリティの観点から定期的にLTS(https://www.jenkins.io/download/lts/)のバージョンアップを実施したほうが良い事は理解していても、そのリスクから二の足を踏んでしまうという事も考えられます。セキュリティという面でも1つのJenkinsに情報を集約し、誰でもアクセスしやすいという状態は望ましくありません。

パフォーマンスやセキュリティ、管理面などを考慮するのであれば、1チームにつき1コントローラーとして、ジョブ数も100を超えない程度にすることをCloudBeesはおすすめしています。そうすることで、ジョブの実行パフォーマンスは維持され、チーム間でプラグインやエージェントなどの競合も起きません。さらに何か問題が発生したときの影響範囲も小さく済みます。

また、このようにチーム毎にJenkinsを作成する際に、構築に時間がかかってしまうことは望ましくありません。Jenkins管理者はなるべく早く利用できる設定を実施した状態で提供する必要があります。

野良Jenkinsの課題

各チームがそれぞれの開発に合わせてJenkins環境を構築している場合、モノリシックJenkinsの問題はあまり発生しません。しかし、新たな課題としてJenkins環境が乱立してうまく管理できない、いわゆる野良Jenkinsの課題がうまれてきます。

Jenkins環境の管理がうまくなされていない場合、まず第一に、各開発チームがそれぞれに自分たちのJenkins環境の設定、管理を行っていくことになるため、貴重な開発者のリソースが無駄に費やされてしまいます。どこかのチームで優れた運用方法がすでに確立されていても、各Jenkins環境がサイロ化してしまっているため共有されることがありません。

また、社内の環境管理という面でも大きな課題がうまれてきます。各チームがそれぞれに異なる種類やバージョンのプラグインを利用していたり、あるチームではセキュリティスキャンなど適切なコンプライアンス対応を行っていない、という状態があったとしても、個々のサーバーで何をやっているかを管理者側から見て取ることができません。

このような状態では、企業全体でJenkins環境管理に大きな無駄な管理コストがかかっていることが多く、また、セキュリティや安定性においてもさまざまなリスクを抱えることになります。そうならないようにJenkinsを社内で広く運用していくためには、スケーラビリティの高いJenkins環境の構築や、社内のJenkins運用方法の確立、また全体のJenkins環境を監視・コントロールするしくみが必要になります。

複数のJenkinsをコラボレーションをしようとしても、Jenkinsの機能が足りずリソースが無駄になっている場合もあります。例えば1つのエージェントを複数Jenkinsコントローラーから共同利用ができないため、ツールのライセンスをJenkinsコントローラー分複数購入している方もいるのではないでしょうか。


JenkinsとCloudBees CIのツール比較表

 

CloudBees CIは社内のJenkins環境を管理するためのさまざまな機能を提供しています。

モノリシックJenkins課題を解決するために、例えばボタン一つでコントローラーを起動するManaged Controllerという機能があります。作成時の初期設定も「レシピ」を定義しておくことで迅速にプラグインなど設定済みの状態で起動できます。複数作成したコントローラーはオペレーションセンターというコントローラーを束ねる概念がありますので、バージョンアップであったりヘルスチェックといった管理も容易に行え、野良Jenkinsの問題の発生を防ぐことができます。

複数のコントローラーで1つのエージェントを利用する共有エージェント機能や、必要なタイミングで必要な数のエージェントを自動で起動する機能もありますので、リソースの有効活用も可能です。また、Jenkinsを利用する上で避けることのできないプラグインの利用についても、コントローラーやプラグイン間の安定稼働を保証するCloudBees Assurance Program (CAP)機能がございます。
それ以外にも安定稼働を行うためにHA構成を組むことができたり、と安定的に素早く低コストでCI環境を構築する様座なな機能がCloudBees CIにはそろっております。

社内のJenkins環境を管理するうえで、OSS Jenkinsで実施可能なこと、CloudBees CIで実施可能なことを下図にて比較しています。

CI環境管理者からみたOSS Jenkins (モノリシックJenkins、野良Jenkins) とCloudBees CIの比較

 

Jenkins環境の管理

モノリシックJenkins 野良Jenkins CloudBees CI
Jenkins環境の管理 一元管理できるが変更が難しい 開発チーム任せになりがち 複数のJenkinsを一元管理
Jenkins環境の管理主体 〇 CI環境管理者 △ 開発チーム 〇 CI環境管理者/開発チーム
新しくJenkins環境を構築 〇 最初だけ 〇 いつでも可能 〇 いつでも可能
Jenkinsバージョンアップ × 調査・調整が大変 × それぞれ実施 〇 CI環境管理者が一括で実施
利用プラグインの把握 〇 容易 × 煩雑 〇 容易
プラグインアップデート × 調査・調整が大変 〇 容易 〇 容易
エージェントの共同利用 〇 不要 × 不可能 〇 可能

 

運用の標準化、開発チーム自由度

モノリシックJenkins 野良Jenkins CloudBees CI
標準化、チームの自由度 標準かは容易、開発チームの自由度は低い チームの自由度は高い、標準化は難しい 標準化と自由度の高さを両立
Jenkinsバージョン統一 〇 容易 × 煩雑 〇 容易
競合するプラグイン利用 × 不可能 〇 可能 〇 可能
設定の強制、権限の委譲 △ CI管理者のみ × チームが完全な管理権限を持つ 〇 設定を強制可能/一部権限を委譲可能
パイプラインの一貫性 共有ライブラリ 共有ライブラリ 〇 パイプラインテンプレート

 

セキュリティや安定性の担保

モノリシックJenkins 野良Jenkins CloudBees CI
セキュリティ・安定性 硬直した環境になりがち 対応がバラバラになりがち サポートあり
プラグイン動作保証 × なし × なし 〇 あり ※1
認証情報の分散 × 単一のJenkinsに集中 〇 いつでも可能 〇 いつでも可能
バックアップと復元 × 機能なし × 機能なし 〇 製品機能あり
高可用構成 × 機能なし × 機能なし 〇 製品機能あり
テクニカルサポート × なし × なし 〇 あり
セキュリティ勧告 × 自分から購読 × 自分から購読 〇 開発元から通知

 

※1 開発元によって検証されたプラグインのバージョンに限ります。

Jenkinsを拡張したCI/CDプラットフォーム「CloudBees CI」の詳細についてはこちらの製品資料にて詳しく紹介していますので、ぜひいちどご確認ください。