前書き

継続的な統合、配信、および展開は、チームがより信頼性の高いソフトウェアを迅速に作成できるように設計されたプラクティスの集まりです。 CI / CDは主に一連の原則と方法ですが、哲学の理想を実用的な選択肢にするためにツールが大きな役割を果たします。

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

https://www.digitalocean.com/community/tutorials/ci-cd-tools-comparison-jenkins-gitlab-ci-buildbot-drone-and-concourse [適切な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システムはメインプロジェクトではなく、組織を支援するツールとなることを目的としていますが、それを管理する責任を軽視すべきではありません。

セキュリティと信頼

管理されたプロバイダーを使用することと、独自の継続的な統合、配信、および展開サービスをセルフホスティングすることのもう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作業の一部を処理するために外部組織を雇っているので、オフロードする作業に対して支払うことが期待できます。 ただし、コストは大幅に異なる場合があります。 価格モデルはサービスごとに異なり、企業はユーザー数、同時ジョブ数、専用コンピューティングリソースの種類と規模、プロジェクト数、月あたりのビルド時間、並列処理量などの要因に基づいて課金されます。

多くの場合、マネージドプロバイダーはかなり安価で開始されますが、組織の規模が拡大するにつれて急速に高価になる可能性があります。 プロジェクトが成熟するにつれて、突然、予算内に収まらない追加のサービス層を使用しなければならなくなることがあります。 プロバイダーを検討する際には、現在のコストを考慮し、さまざまなシナリオを考慮して将来のコストを予測することが重要です。 また、プロバイダーの価格の安定性に注意して、価格が変更されて計画が中断される可能性を最小限に抑えます。 徹底的に分析すると、使用しているサービスの価格構造を把握し、それに比例して予算を組むことで、サービスをセルフホスティングする場合よりも総運用コストを簡単に予測できます。

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

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

ただし、インフラストラクチャの価格は、独自のCI / CDサービスを実行する運用コストの1つの要素にすぎません。 独自のシステムを実行することを選択することで、チームはかなりの量の追加作業と責任を負います。 スケールアウトすると、テストと展開の管理を担当する内部チームが、より複雑なプロセスを拡大および開発する必要がある場合があります。 これには、内部スタッフの雇用とトレーニングに関する直接的なコストと、製品の機能や他の作業に取り組む代わりにCI / CDシステムの管理に集中させることによって生じる間接的な機会コストの両方があります。 全体として、自己ホスト型サービスは通常、インフラストラクチャの観点から考えるのがはるかに簡単ですが、総運用コストの観点からはより困難です。

中間点はありますか?

マネージドCIサービスとセルフホストCI / CDサービスの違いについて説明しましたが、特定の組織により適したハイブリッドアプローチもあります。 一部のマネージドプロバイダーは、WebベースのSoftware-as-a-Serviceオファリングの代替として、オンプレミスバージョンのサービスを提供しています。 これにより、組織に外部プロバイダーとのやり取りを困難にする要件がある場合、セルフホスティングと外部管理の間のギャップを埋めることができます。

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

結論

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