クラウドホスト型 CI を理解しよう

クラウドコンピューティングはソフトウェア開発に多大な影響を与えてきました。 クラウドネイティブのアプリケーションとサービスは、拡張可能なクラウドホスト型インフラストラクチャを活用するように設計されており、ますます一般化しています。

クラウドホスト型 CI はクラウドホスト型インフラストラクチャのメリットをソフトウェアのビルド、テスト、およびデプロイのプロセスまで拡張するものです。

CI/CD をこれから始める方も、オンプレミス型セットアップをすでに備えている方も、このページでクラウドホスト型 CI/CD にどのようなメリットがあるかを理解できます。

クラウド CI を解明

継続的インテグレーション、デリバリー、およびデプロイは、より素早く確実にソフトウェアをユーザーにリリースできます。 コードベースを変更するたびに、CI/CD はソフトウェアを一連の自動化されたステップに通して、それが期待どおりに動作するかを検証します。 このシステムによって、本番環境におけるバグの数を最小限に抑えるだけでなく、その他多数のメリットを提供しながら、開発からリリースまでの時間を短縮することができます。

手動プロセスから自動 CI/CD に移行することで、時間と労力の節約にはなりますが、同時にインフラストラクチャへの要求も高まります。 数週間または数か月ごとに製品の新しいバージョンをテストとステージング環境にデプロイする代わりに、CI/CD では 1 日に数回以上、最新のコードをテストするためです。

同じコードベースで作業し、変更を貢献する人が多くなるほど、コードがビルド、テスト、およびデプロイの自動プロセスに投入される頻度も高まります。 CI/CD プロセスを独自のサーバーにホストする場合は、使用できるサーバーの台数がすぐに制限要因となってしまうでしょう。 チームが重要な修正に取り組む場合やリリースに向けて機能を完成させている場合など、要求が高くなる時期には、社内の CI/CD インフラストラクチャがボトルネックになる可能性があります。

こういったシナリオにおいては、CI/CD プロセスをクラウドにホストすることにメリットがあります。 クラウド CI では、実行するパイプラインをクラウドホスト型インフラストラクチャにセットアップするか、フルマネージドのクラウドベースの CI/CD サービスを使用することができます。

いずれのオプションにおいても、クラウドコンピューティングの拡張性を活用することが可能です。 要求の高い時期に十分な容量を備えることと、アイドル状態のサーバーの維持費の間でバランスを見出そうとするのではなく、必要に応じてビルドファームを拡張することができます。

クラウドホスト型 CI のメリット

クラウドで CI/CD をホストすると、オンデマンド式にリソースを拡張してプロセスをさらに堅牢化し、保守費を削減し、クラウドネイティブ開発を容易にすることができます。

インフラストラクチャのコード化(IaC)でワークフローを単純化

クラウドホスト型インフラストラクチャでは、スクリプトによる環境の構成が通例です。 インフラストラクチャ構成をコード化することによって、すべてのビルドおよびテスト環境が同一であることを保証できます。 このプロセスでは、必要に応じてさらに多くのインフラストラクチャをオンラインにすることも可能です。

開発中のソフトウェアと同様に、インフラストラクチャ自体も CI/CD パイプラインに通して期待どおりに動作することを確認することができます。 このステップによって、変更を簡単にロールバックすることができます。

コンテナー化を最大限に活用

クラウドネイティブアプリケーションを開発している場合は、コンテナーを使用していることでしょう。 コンテナーを使用すると、環境の依存関係と構成の情報をソフトウェアとともに 1 つのアーティファクトにパッケージ化し、それをコンテナーランタイムで任意のマシンにデプロイすることができます。

Kuebernetes などのコンテナーオーケストレーションツールは、大量のコンテナーの操作をより簡単に行えるように開発されています。 デプロイ、管理、および拡張といったタスクを自動化することができます。

CI/CD ワークフローでコンテナーを使用することによって、最新のビルドをより簡単に別のパイプラインステージにデプロイすることができます。 ビルドアーティファクトはコンテナーのイメージであるため、本番環境にリリースされる前に、各テスト環境に一貫してデプロイすることができます。

クラウド型 CI/CD では、コンテナーが計算リソースを効果的に使用できるため、自動化ツールを利用することができます。 需要が高い時には容量を増加でき、需要が低い時にはコンテナーを終了して基板のインフラストラクチャを解放することができます。

サーバー保守の手間を省く

CI/CD プロセスをクラウドに移行すると、ビルドファームは仮想マシンにホストされます。 さらに多くの容量が必要な場合に行うのはそのセットアップのみで、物理的なハードウェアの調達、インストール、および管理を行う必要はありません。

このような負担が取り除かれるため、チームはパイプラインプロセスの最適化とセキュリティに集中できるようになります。 コストは処理能力と処理時間の要因であるため、長期的により少ないマシン台数が使用される場合よりも素早く成果を得られるように、時間をかけてできるだけタスクを並列化することをお勧めします。

リリースパスを常に対応可能な状態に維持

CI/CD プロセスは、ソフトウェア開発チームにとって非常に重要なアセットです。 それは、ユーザーにソフトウェア更新をリリースするための仕組みであるためです。 そのプロセスをクラウドにホスティングすることで、リリースへのパスが想定外のサービス停止によって使用できなくなる可能性を縮減することができます。 普段、このレベルのレジリエンシーは贅沢に見えるかもしれませんが、深刻なバグが発見され、緊急に修正をデプロイする必要が出た場合にはすぐに要件となります。

クラウドホスト型 CI/CD プロセスの場合、クラウドリソースの拡張性により、ブルーグリーンデプロイ戦略の採用もより簡単になります。 ブルーグリーン手法を実践することで、本番環境で問題が発生した場合に、トラフィックをすぐに以前のバージョンに迂回させることができます。 このプロセスによって、サービスを維持したまま修正に取り組むことが可能です。

クラウド CI ホスティングについて考慮すべき点

クラウド型 CI/CD では、インフラストラクチャの費用、拡張性、および信頼性の面で大きなメリットを得られますが、欠陥や落とし穴となる可能性もあるため、それらを考慮する必要があります。

システムアーキテクチャ

製品がコンテナーを中心に作成されている場合、クラウドホスト型 CI/CD では、それを使用してテスト環境へのデプロイを合理化することができます。 一方、モノリシックアーキテクチャを使用している場合は、ソフトウェアをコンテナーにパッケージ化するのが困難になります。

もちろん、コンテナーはクラウドホスティングに不可欠ではありません。 クラウドプロバイダーのインフラストラクチャで仮想マシンを使用して、ビルドを実行し、テスト用に一貫した本番前環境を準備することも可能です。 ただし、VM はコンテナーよりも多くのリソースを消費し、環境を個別に構成する必要があります。

ナレッジとスキル

インフラストラクチャのコード化(IaC)に関わる知識を有していない場合、チームメンバーが時間を取ってスキルを習得するか、その知識を外部から取りいれることを検討する必要があります。

とは言え、クラウドテクノロジーの操作経験は望ましいスキルです。 チームにそれらのスキルを開発し、最新のテクノロジーを使用する帰化を与えられれば、スタッフの定着率と採用に役立ちます。

コスト

クラウドでは時間で料金が発生するため、アイドル状態の計算リソースが課金されてしまいます。 クラウドホスティングのコスト効率を高めるには、効率的に使用するしかありません。 つまり、使用状況を監視してタイムアウト期間を過ぎたアイドル状態のインスタンスを解放するツールを活用したり、そのロジックを独自に実装する必要があります。 ロジックを独自に実装するにはそのスキルが必要となるため、ツールの使用やロジックの実装をよく吟味して比較することをお勧めします。

セキュリティ

データやサービスをクラウドでホスティングする際は、セキュリティに関する懸念事項が必ず伴います。 会社によっては、重要なソフトウェアがサードパーティのキットに存在するという考え方だけで、提案が取り消されるでしょう。 とは言え、ソースコントロールリポジトリから、CI サーバーやテスト環境に至るまで、ライブサービスとデプロイパイプラインの両方のホスティングにパブリッククラウドを使用している組織もたくさんあります。

悪意のあるアクターがもたらすリスクを軽減するためには、潜在的な攻撃ベクトルを特定し、CI/CD プロセスに対策を組み込み、アクセス制御を実装することが不可欠です。

ハイブリッドのアプローチ

インフラストラクチャのコード化(IaC)、コンテナー、およびコンテナーオーケストレーションはクラウドテクノロジーに根ざすものですが、プライベートクラウドまたはオンプレミス型とクラウドホスト型のハイブリッドを使用する CI/CD セットアップにも組み込むことが可能です。

たとえば、パフォーマンステストの実行など、プロセスの一部にクラウドホスト型インフラストラクチャを使用し、残りをオンサイトに維持することも可能です。

このハイブリッド式の手法には、以下のようないくつかのメリットがあます。

  • 組織で将来的にクラウドホスティング型インフラストラクチャに移行することが計画されている場合は、クラウドネイティブのツールを採用しておくことで、あらかじめ専門知識を組み込み、移行作業を楽にすることができます。
  • IsC では、テスト実行ごとにスクリプトを実行するだけで、環境をより素早くリフレッシュできます。
  • 環境作成をコード化すると、セキュリティ、パフォーマンスまたはUIのテスト、あるいはサポートと営業チーム向けのサンドボックスなど、目的に関係なく、本番環境と本番前環境が同一であることを保証する一貫性を得ることができます。
  • インフラストラクチャ構成ファイルをソースコントロールに格納しておくことで、いつどのような変更が導入されたかを示す監査証跡を維持できるため、環境に関わる問題のデバッグが単純化されます。

TeamCity のメリット

TeamCity では、どの程度の CI/CD プロセスをクラウドで実行するかを正確に選択できます。

TeamCity On-Premises では、CI サーバーとビルドエージェントの両方をオンサイトまたはクラウドに柔軟にホストできます。 ビルド、テスト、およびデプロイタスクをすべてクラウドにホストする場合でも、需要が高まった場合に自動的にビルドファームを拡張する場合でも、TeamCity の主要なクラウドサーバーとのネイティブ統合によって、必要となるすべての機能を得られます。

TeamCity Cloud ではマネージド CI サーバーを使用できるため、インフラストラクチャの保守を行わずに、ビルド、テスト、およびデプロイプロセスを合理化することに専念できます。 JetBrains がホストするビルドエージェントとクラウドでホストされた、またはオンサイトの独自のビルドマシンの両方を使用するオプションがあるため、最適なビルドファームを自由に作成することができます。

TeamCity Pipelines は、柔軟なクラウドネイティブの手法によって CI/CD をさらに効率化できるように設計されました。 視覚的なドラッグアンドドロップ式のエディターまたは YAML のいずれかからワークフローに最適な方を選択して、パイプラインを簡単に作成、管理、および最適化することができます。 TeamCity Pipelines ではクラウドホスト型とセルフホスト型のエージェントの両方がサポートされているため、必要に応じて拡張し、可能な限りシームレスで自動化されたビルド、テスト、およびデプロイプロセスを実現することができます。