序章

継続的インテグレーション、デリバリー、およびデプロイメントは、チームがより信頼性の高いソフトウェアを迅速に作成できるように設計されたプラクティスのコレクションです。 CI / CDは主に一連の原則と方法ですが、ツールは哲学の理想を実用的なオプションにする上で主要な役割を果たします。

CI / CDシステムは、共有リポジトリへの各コミットを自動的に構築またはパッケージ化することにより、チームがソフトウェアに新しい変更を統合または組み込むのに役立ちます。 新しいビルドごとにテストスイートを実行し、テストに合格すると、より選択的な環境に自動的にプロモートします。 パイプライン全体をトラバースするビルドのバージョンは、ライブの本番システムに自動的にデプロイすることも、手動でデプロイするためにキューに入れることもできます。 CI / CDシステムは幅広い責任があるため、通常、内部環境とインフラストラクチャの大部分に影響を与えます。

適切なCI/CDシステムの選択は難しい場合がありますが、通常、オプションは2つのカテゴリのいずれかに分類されます。プロバイダーを介してアクセスされるマネージドCI / CDサービスと、セットアップおよび管理できるセルフホストサービスです。あなた自身。 このガイドでは、これら2つの主要なソフトウェアグループが異なるカテゴリ間でどのように異なるかについて説明し、優れた中間点を提供しようとするいくつかの混合アプローチについて説明します。 仕事に最適なソフトウェアは、組織のニーズとチームの機能と優先順位に大きく依存します。

インフラストラクチャの管理

マネージドCI/CDサービスを使用することと独自のセルフホストサービスを実行することの主な違いの1つは、インフラストラクチャ管理です。 CI / CDシステムを実行するにはリソースが必要であり、他のインフラストラクチャと同様に、これは誰かがサービスと基盤となるホストシステムの状態を維持する必要があることを意味します。 組織の時間、お金、価値観によって、通常、このカテゴリの目標に最適なソリューションが決まります。

マネージドCI/CDサービス

マネージドサービスは、CI/CD機能を提供する外部組織によって完全にホストおよび監視されます。 外部組織は、サービスの実行とスケーリング、サーバーフリートの正常性の維持、および安全で使いやすい方法でのサービスへのアクセスの提供に責任を負います。 これは通常、マネージドCI / CDサービスが提供する最大の価値であり、事実上、複雑さをカプセル化して抽象化することにより、チームから大量の作業をオフロードできます。

マネージドソリューションは作業の一部を委任し、チームが他の懸念事項に集中できるようにしますが、インフラストラクチャの制御を外部化することは適切ではない場合がある領域があります。 コンプライアンスまたは独自の組織標準により、プロセスの厳密な制御、コードまたはデータへの厳密に規制されたアクセスが必要な場合、または外部パートナーが保証できない特別な要件が含まれている場合は、独自のサービスを管理することが唯一の選択肢となる可能性があります。

セルフホストCI/CDサービス

CI / CDシステムをセルフホスティングする場合は、インフラストラクチャの決定を行い、ハードウェアとパッチソフトウェアにサービスを提供して基盤となるサーバーを正常に保ち、サービスが利用可能で、安全で、適切に実行されるようにする責任があります。 これは、チームの専門知識の範囲外であり、時間の予算を立てることができる範囲を超える可能性のある、広範囲にわたる追加の責任です。

CI / CDシステムは幅広いセキュリティアクセスを備えており、プロジェクトにプッシュする変更に対する信頼を築くために不可欠であるため、チームがそれを補足ではなく重要なコンポーネントとして扱うことが不可欠です。 継続的なシステムのダウンタイムは、チーム全体の生産性と機能に影響を与える可能性があります。 CI / CDシステムはメインプロジェクトではなく、組織を支援するためのツールとなることを目的としていますが、CI/CDシステムを管理する責任を軽視してはなりません。

セキュリティと信頼

マネージドプロバイダーを使用することと、独自の継続的インテグレーション、配信、および展開サービスをセルフホスティングすることのもう1つの大きな違いは、セキュリティと信頼の相互作用です。 CI / CDシステムは、コードベースにアクセスでき、複数の環境に展開できます。 これは、CI/CDシステムのセキュリティに重点を置く必要があることを意味します。 マネージドソリューションの場合、外部プロバイダーへの信頼をさらに評価する必要があります。

マネージドCI/CDサービス

多くの点で、マネージドCI / CDサービスは、ほとんどの組織にとってセキュリティをはるかに容易にします。 特別な規制要件がない場合、ほとんどのプロバイダーは、暗号化されたチャネルを介してコードベースにアクセスしたり、分離された環境でテストを実行したりする堅牢なセキュリティを提供します。 プロバイダーはCI/CDのみに関心があるため、通常、不正アクセスや機密情報の偶発的な公開などの脅威に対してサービスを適切にロックダウンするための焦点と専門知識を備えています。 それらのセキュリティフットプリントは明確に定義されており、習熟度のドメイン内にあります。

一方、マネージドソリューションを使用する場合、組織のセキュリティの多くは、CI/CDプロバイダーの機能と整合性への信頼に帰着します。 あなたは外部の関係者に責任を引き渡しています。これにより、チームの負担が軽減されますが、ある程度の説明責任と管理が放棄されます。 たとえば、いくつかの欠点には、プロバイダーがサポートしていないセキュリティメカニズムを実装できないこと、高リスクのセキュリティ脆弱性に迅速にパッチを適用するためにプロバイダーに依存すること、プロバイダーが受信するインシデントとセキュリティレポートについて率直であることを信頼する必要があることが含まれます。 。

セルフホストCI/CDサービス

セルフホストCI/CDサービスには、さまざまなセキュリティ上の課題があります。 システム全体のセキュリティは、今ではあなた自身の責任です。 つまり、チームは、サービスと展開のために安全で分離された環境を構成し、CI / CDに関連するすべてのテクノロジーにわたるゼロデイ開示に迅速に対応し、強力なアクセス制御メカニズムを実装し、システムのセキュリティフットプリント。 これは非常に時間がかかり、困難な作業になる可能性があり、適切に管理するには専任の管理チームまたはセキュリティチームが必要になる可能性があります。 インフラストラクチャの他の部分のタスクに専念するチームがまだない場合は、プロジェクトの成長に合わせて管理するのが難しい場合があります。

ただし、独自のサービスを管理するということは、他の方法では不可能な、ある程度の柔軟性とセキュリティプロセスおよびツールの制御も可能にすることを意味します。 チームは、他の人が問題に対処するのを待つのではなく、脅威に迅速に対応できます。 CI / CDインフラストラクチャは、複数の保護レイヤーの背後にある独自のインフラストラクチャ内に安全に展開できます。 コードリポジトリをセルフホストする場合、潜在的な脅威が標的とする可能性のある表面積をさらに最小限に抑えることができます。 このような重要なツールと対話するために、独自のプライベートネットワークとセキュリティで保護された境界の外に出る必要をなくすことで、セキュリティの失効の機会を最小限に抑えることができます。

統合

CI / CDシステムは、さまざまな環境や他の多くのソフトウェアの調整ポイントであるため、さまざまなソリューションを使用している他のツールやシステムと簡単に統合できるかどうかを検討することが重要です。 各継続的インテグレーションシステムには、ネイティブにサポートするさまざまなプロジェクトのセットがあります。 一部のシステムは、ユーザーが拡張機能を作成または使用してプラットフォームの機能または相互運用性を強化できるプラグインフレームワークで構築されています。 これらはすべて、CI/CDシステムを選択する際に考慮すべき点です。

マネージドCI/CDサービス

一般に、マネージドCI / CDソリューションは通常、互換性とサポートを保証する、焦点を絞ったプロバイダーのセットを提供します。 これらのファーストクラスのシステムは、信頼性が高く予測可能な、人気のある有名なリポジトリプロバイダーおよび開発者ツールであることがよくあります。 統合の範囲は比較的限られているため、それらの保守を担当するチームは通常、緊密な統合を開発し、依存関係の変更に迅速に対応して、システム内の機能が重大な変更に悩まされないようにすることができます。

この信頼性の高い、人気のあるサービスとの緊密な統合は、プロジェクトの要件に適合する場合に非常にうまく機能します。 これにより、組織の時間とエネルギーを節約して互換性の問題をデバッグし、依存関係の更新を綿密に追跡し、ネイティブに通信しないシステム間で変換を行うことができます。 ただし、依存関係またはソフトウェア要件が管理対象プロバイダーによってサポートされているセットの範囲外である場合、通常、その問題を回避するためにできることはほとんどありません。 他のツールの選択は、CI/CDプロバイダーがサポートすることを決定したプロジェクトによって制限され始める場合があります。

セルフホストCI/CDサービス

セルフホストサービスは、多くの場合、相互作用する可能性のあるプロジェクトの状況がはるかに多様です。 ほとんどのセルフホストソリューションはオープンソースであるため、ユーザーや組織は、システムに追加されるサポートに影響を与えることがよくあります。 セルフホストサービスの機能だけではありませんが、多くのプロジェクトには、さまざまなプロジェクトやユースケースのサポートに役立つ統合の広範なライブラリを備えたプラグインシステムがあります。 コミュニティが製品および関連コンポーネントの開発に積極的に貢献できる場合、統合を見つける可能性ははるかに高くなります。

コミュニティの関与の欠点は、統合の質が大幅に異なる可能性があることです。 人気のあるサービスとの統合は、適切に維持され、正常に機能するように維持される可能性がありますが、その範囲外の統合については、統合の正確性と使いやすさを確認するために集中的なテストが必要になる場合があります。 これらのあまり人気のない統合は、依存プロジェクトに変更が加えられた場合、またはCI / CDシステムの現在のバージョンを追跡するために定期的に更新されない場合、停滞して簡単に機能しなくなる可能性があります。 さらに、コミュニティが提供するプラグインでは、問題追跡システムに関するレポートを提出したり、コミュニティフォーラムやIRCチャネルを通じて非公式のピアツーピアヘルプを引き出したりする以外に、サポートを受けることが難しい場合があります。 重要な統合の場合、チームはコンポーネントを内部でサポートおよび保守する責任を負わなければならない場合があります。

費用

最後に、マネージドCI / CDプロバイダーと独自のサービスのセルフホスティングの最大の違いの1つは、価格です。 マネージドサービスは、提供される付加価値のためにほとんどの場合、前払いで費用がかかりますが、これは、プロジェクトの規模と要件、および選択したソリューションに応じて、さまざまな方法で機能する可能性があります。 現在および将来の要件を分析して、将来のプロジェクトでどのコストが受け入れられなくなる可能性があるかを判断する必要があります。

マネージドCI/CDサービス

マネージドCI/CDサービスは、基本的な数値を見ると、ほとんどの場合、セルフマネージドよりもコストが高くなります。 マネージドプロバイダーを使用すると、CI / CD作業の一部を担当する外部組織を雇うことになります。そのため、オフロードする作業の料金を支払うことが期待できます。 ただし、コストは大幅に異なる可能性があります。 料金モデルはサービスごとに異なり、ユーザー数、同時ジョブ数、専用コンピューティングリソースの種類と規模、プロジェクト数、1か月あたりのビルド分数、並列処理量などの要素に基づいて料金が請求されます。 。

多くの場合、マネージドプロバイダーはかなり安価に開始されますが、組織がスケールアウトするにつれて、すぐに高額になる可能性があります。 プロジェクトが成熟するにつれて、予算内に簡単に収まらない追加のサービス層を使用しなければならないことに突然気付く場合があります。 プロバイダーを検討するときは、現在のコストを考慮し、さまざまなシナリオで将来どのようなものになるかを予測することが重要です。 また、プロバイダーの価格設定の安定性に注意して、計画を混乱させる将来の価格設定の変更の可能性を最小限に抑えます。 徹底的に分析すると、使用しているサービスの料金体系を理解し、それに比例して予算を立てることで、セルフホスティングサービスの場合よりもはるかに簡単に総運用コストを予測できます。

セルフホストCI/CDサービス

セルフホストCI/CDシステムは通常、一見すると安価なオプションですが、評価する必要のある隠れたコストが発生する可能性があります。 セルフホストオプションを実行するにはコンピューティングリソースが必要であるため、最初は、継続的なシステムを実行するインフラストラクチャを調達することが最大のコストになります。 サービスとしてのインフラストラクチャクラウドコンピューティングプラットフォームの人気が高まっているため、これは費用効果の高いオプションになっています。 セルフホストCI/CDは、要件の変化に応じて予測可能なコストで追加のインフラストラクチャをプロビジョニングおよび構成できるため、マネージドサービスよりも直線的にコストを拡大する傾向があります。

ただし、インフラストラクチャの価格は、独自のCI/CDサービスを実行するための運用コストの1つの要素にすぎません。 独自のシステムを実行することを選択することにより、チームはかなりの量の追加の作業と責任を引き受けます。 スケールアウトすると、テストと展開の管理を担当する内部チームが成長し、より複雑なプロセスを開発する必要がある場合があります。 これには、社内スタッフの採用とトレーニングに関する直接的なコストと、製品の機能やその他の作業ではなく、CI/CDシステムの管理にそれらの個人を集中させることによって発生する間接的な機会費用の両方があります。 全体として、セルフホストサービスは通常、インフラストラクチャの観点からははるかに簡単に推論できますが、総運用コストの観点からはより困難です。

妥協点はありますか?

マネージドCI/CDサービスとセルフホストCI/CDサービスの違いについて説明しましたが、特定の組織により適している可能性のあるハイブリッドアプローチもいくつかあります。 一部のマネージドプロバイダーは、Webベースのサービスとしてのソフトウェアの代わりにオンプレミスバージョンのサービスを提供しています。 これは、組織に外部プロバイダーとのインターフェースを困難にする要件がある場合に、セルフホスティングと外部管理の間のギャップを埋めるのに役立ちます。

たとえば、セキュリティ要件でコードが内部ネットワークを離れないように指示されている場合は、有料またはエンタープライズCI/CDソリューションのオンプレミス展開を検討するオプションがあります。 これにより、外部契約で保証できるサポートと説明責任を犠牲にすることなく、システムに使用されるネットワークとインフラストラクチャを制御できます。 オンプレミスの有料CI/CDは、マネージドサービスを使用する際の潜在的な課題のいくつかに対処するのに役立ちますが、完全なソリューションではありません。 これは、コンプライアンス、セキュリティ、および信頼の問題の一部に役立つ可能性がありますが、非常に費用がかかる可能性があり、管理責任の一部を自分のスタッフが引き受ける必要がある可能性があります。 ハイブリッドソリューションは、他の2つのカテゴリの利点と欠点のいくつかを引き受けます。

結論

マネージドCI/CDプロバイダーとセルフホストソリューションの両方が、開発とリリースのプラクティスを改善し、より信頼性の高い製品をより自信を持って提供するのに役立ちます。 これら2つの主なオプションの最も重要な違い、決定に影響を与える可能性のあるいくつかの要因、および各選択で克服しなければならない潜在的な課題について説明しました。 また、セルフホスティングソリューションとマネージドソリューションの境界を越えようとする製品についても簡単に説明しました。 最終的に、組織固有の要件、予算、および管理帯域幅は、どのオプションが適切なトレードオフを提供するかを決定するのに役立ちます。