CI/CDパイプラインとは?
CI/CD(継続的インテグレーション、継続的デリバリー/デプロイメント)パイプラインとは、ソフトウェア デリバリーにおけるコード作成から導入までの一連のステップです。DevOpsの基盤となるCI/CDは、反復タスクの自動化を通してアプリケーション開発を合理化することで、早期にバグを検出し、人的ミスを削減し、ソフトウェア デリバリーを高速化します。
CI/CDパイプラインの解説
CI/CDでは、コード開発から本番環境への導入までの一連のプロセスを自動化することで、頻繁に信頼できる方法でコード変更を本番環境にデリバリーできるようにします。DevOpsは、開発チームと運用チームのコラボレーションを重視し、ソフトウェアの品質を損なうことなく最終的に開発ライフサイクルを短縮する新しい形のソフトウェア開発ですが、CI/CDはそのバックボーンを形成します。
DevOpsの基本原則を具体化したCI/CDパイプラインは、開発、テスト、および運用の間のギャップを埋めます。このコラボレーション環境で、CI/CDは、製品の品質とタイムリーなデリバリーに対する共同責任の文化を促進します。
継続的インテグレーション(CI)
継続的インテグレーション(CI)は、開発者が定期的にコード変更を中央リポジトリにマージするソフトウェア開発の手法です。マージのたびに自動化されたビルド プロセスとテスト プロセスが実行されるため、エラーを発生させることなく、確実に新しいコードと既存のコードベースが統合されます。開発サイクルの最後に変更をマージすることは、従来は難しい作業でしたが、CIはそれを最小化します。
継続的デリバリー/デプロイメント(CD)
継続的デリバリーと継続的デプロイメントは、どちらも略語はCDであり、CIに続く段階を扱います。継続的デリバリーは、リリース プロセスを自動化し、ソフトウェアの任意のバージョンをいつでも本番環境に導入できる状態を維持するものです。ソフトウェアは常に変更されますが、それを導入可能な状態に保ちます。継続的デプロイメントはさらに進化して、自動テストに合格したすべての変更を自動的に本番環境に導入し、リード タイムを最短にします。
継続的デリバリーと継続的デプロイメントはどちらも、事前定義されたインフラストラクチャ設定を使用して、ステージング環境、本番環境など、多様な環境にアプリケーションを自動的に導入する処理を伴います。CDパイプラインは、統合テスト、パフォーマンス テスト、セキュリティ評価など、追加のテストを組み込んで、アプリケーションの品質と信頼性を保証します。
継続的デリバリーと継続的デプロイメントの比較
継続的デリバリーと継続的デプロイメントの主な違いは、変更を本番環境に移行する最終ステップにあります。継続的デリバリーでは、導入の最終ステップは手動プロセスであり、自動テストで見落とされる可能性がある潜在的な問題を捕捉するセーフティ ネットを用意しています。一方、継続的デプロイメントは、本番環境への最終的な導入を含めて、パイプライン全体を自動化するため、問題を特定して修正するために厳密なテストと設定の監視を行う必要があります。
言い換えると、CI/CDは、以下の2つのアプローチの一方を指します。
- 継続的インテグレーションと継続的デリバリー(CI/CD)
- 継続的インテグレーションと継続的デプロイメント(CI/CD)
組織は、CI/CDパイプラインを導入することで、市場投入までの期間の短縮、継続的フィードバック ループの構築、およびソフトウェア品質の向上を達成できます。CI/CDは、開発チーム、運用チーム、およびセキュリティ チームの連携を促進して、安全で安定した高性能なアプリケーションのデリバリーを可能にします。
CI/CDの仕組み: パイプラインの1日
開発者が1杯のコーヒーを飲むところから、CI/CDパイプラインの1日が始まります。気分が落ち着いた後、Gitバージョン管理システムから最新のコードをプルします。最新の変更を確認し、その日の作業を開始します。すなわち、新機能を作成し、バグを修正します。
作業が完了した後、変更を共有リポジトリにコミットします。これで、CI/CDパイプラインが作動し始めます。Webhookが設定されたパイプラインは、コミットを検出し、ビルド段階をトリガーします。Jenkins、CircleCIなどのツールを使用して、ソース コードをコンパイルし、実行可能ファイルを生成します。たとえば、コードベースがJavaアプリケーションである場合、MavenまたはGradleによるビルドを実行します。
次に、パイプラインは、アプリケーションをパッケージ化して、導入可能なアーティファクトを生成します。Webアプリケーションの場合、Dockerイメージを作成します。次に、このイメージを、Docker Hub、AWS ECRでホストされているプライベート レジストリ、Google Container RegistryなどのDockerレジストリにプッシュします。
ビルドが完了すると、パイプラインはテスト段階に移行し、テスト環境を迅速に構築します。通常は、Kubernetesのようなコンテナ オーケストレーション ツールを使用します。この環境にアプリケーションを導入し、一連の自動テストを実行します。このテストには、JUnitで実行するユニット テスト、Postmanなどのツールで実行する統合テスト、およびSeleniumで実行するエンドツーエンド テストを含めることができます。
テストに合格した場合、パイプラインは導入段階に進んで、テスト環境を破棄し、本番環境を構築します。次にアプリケーションをこの環境に導入します。通常はブルー/グリーンデプロイメント戦略を使用して、ダウンタイムを最小限に抑えて、必要なときに速やかにロールバックできるようにします。
1日を通して、新しいコミットのたびに、パイプラインは上記のプロセスを繰り返します。また、Flyway、Liquibaseなどのツールを使用したデータベース移行管理、SonarQubeによる静的コード分析、さらにはトラフィック パターンに基づく本番環境の自動スケーリングも処理します。
さらに、パイプラインは、開発チームにリアルタイムにフィードバックを提供します。ビルド結果の通知をSlackチャンネルに送信し、失敗したビルドの場合はJiraでチケットを作成し、パイプラインのパフォーマンスに関するリアルタイムの指標をダッシュボードで更新します。
1日が終わると、CI/CDパイプラインは、次のコミットを処理する準備ができており、引き続き速いペースで高品質ソフトウェアをデリバリーするという使命を果たします。パイプラインの1日は繰り返しかもしれませんが、繰り返すたびにチームはユーザーに価値を提供するという目標に近づいています。
CI/CDパイプラインの段階
テクノロジ主導のプロセスであるCI/CDは、バージョン管理システム、ビルド サーバ、他の開発ツールなどと統合されています。標準的なパイプラインは複数の段階で構成され、各段階はコードを多様な角度から検証し、導入する準備ができていることを確認するように設計されています。
開発者がコードをバージョン管理リポジトリにコミットすると、パイプラインはすぐに動作を開始して、ソース、ビルド、テスト、および導入の各段階を自動化します。
ソース段階
ソース段階では、バージョン管理システムを使用します。開発者は、コード変更をバージョン管理システムにコミットします。CI/CDパイプラインは、このリポジトリを監視し、新しいコミットを検出すると、次の段階をトリガーします。人気のあるバージョン管理システムとして、Git、Mercurial、Subversionがあります。
ビルド段階
ビルド段階では、CI/CDパイプラインは、ソース コードをコンパイルして実行可能なアーティファクトを作成します。ビルド段階で、コードをパッケージ化して、Dockerコンテナまたは導入に適した別の形式にすることもあります。ビルド プロセスは、信頼性を持たせるために、反復可能で一貫性を備えている必要があります。
テスト段階
CI/CDパイプラインのテスト段階では、ビルドされたアーティファクトに対して一連の自動テストを実行します。テストには、ユニット テスト、統合テスト、およびエンドツーエンド テストを含めることができます。テストの自動化は、この段階で問題を速やかに特定して修正するために重要です。
導入段階
導入段階は、CI/CDパイプラインの最終段階です。継続的デリバリーが設定されている場合、導入段階ではリリースの手動導入を準備します。継続的デプロイメントが設定されている場合、パイプラインは自動的にリリースを本番環境に導入します。
CI/CDパイプラインの種類
単純なプログラムのCI/CDパイプラインには、通常はソース、ビルド、テスト、導入などの段階が含まれます。開発者は、Gitのようなバージョン管理システムにコードをコミットします。パイプラインは、ビルド プロセスをトリガーし、コードをコンパイルして、アーティファクトを作成します。品質保証のために、これらのアーティファクトに対して自動テストを実行します。テストに合格した場合、パイプラインはアーティファクトを本番環境に導入します。Jenkins、CircleCI、GitLab CI/CDなどのツールで、このプロセスをオーケストレーションできます。
クラウドネイティブなCI/CDパイプライン
クラウドネイティブなCI/CDパイプラインは、マイクロサービスに固有のモジュール性を利用して、独立した開発と導入を推進します。各マイクロサービスに固有のパイプラインが存在し、隔離したテスト、ビルド、および導入を実行できるため、連鎖的な失敗のリスクが減少し、提供のスピードが向上します。
マイクロサービスベースのパイプラインのセキュリティは、複数のレベルで適用されます。その中の1つに、各マイクロサービスを独自の権限と制御を備えた潜在的セキュリティ境界として扱うことが含まれます。イメージ スキャン、ランタイム保護などのコンテナ セキュリティ対策に従うことで、マイクロサービスの完全性を保護します。
Istio、Linkerdなどのサービス メッシュは、一般的なクラウドネイティブなパイプライン テクノロジです。サービス間通信で相互TLSやそれと同様の機能を実現することで、マイクロサービスを保護、接続、および監視する統一された方法を提供します。
クラウドネイティブなCI/CDパイプラインは、コード リポジトリ、ビルド サーバ、および導入ターゲットとして、クラウドベースのツールを活用します。たとえば、AWSのパイプラインは、ソース管理にCodeCommit、ビルドとテストにCodeBuild、導入にCodeDeployを使用できます。AWSのパイプラインは、オンデマンドで拡大すること、クラウドネイティブな機能と統合すること、および従量課金制の価格を提供することができます。
Kubernetesネイティブなパイプライン
Kubernetesの拡張可能なアーキテクチャは、CI/CDの原則と一致しており、急速で信頼できるアプリケーション デリバリーをサポートします。Kubernetesネイティブなパイプラインは、Kubernetesクラスタ内で直接動作し、その機能を利用してコンテナ化されたアプリケーションをオーケストレーション、スケーリング、および管理します。コンテナ化されたアプリケーションを複数のクラスタにまたがって導入すること、ロールバックを扱うこと、およびサービス検出を管理することができます。パイプラインのビルド、テスト、導入などの各段階は、Kubernetesのジョブまたはポッドとして実行され、分離とリソース制御を実現します。
Kubernetesネイティブなパイプラインのセキュリティには、Kubernetes固有の対策が含まれます。ロールベースのアクセス制御(RBAC)を使用して、パイプラインの権限を制限し、潜在的なセキュリティ問題の影響範囲を縮小します。ポッドのセキュリティ ポリシーは、パイプラインの各段階を実行するコンテナの機能を制限して、セキュリティ体制を強化できます。
Jenkins X、Tekton、Argo CDのようなCI/CDツールは、Kubernetesネイティブなパイプライン向けに設計されています。GitOpsを使用した環境のプロモーション、プル リクエスト用のプレビュー環境などの機能を提供します。
モノレポ向けCI/CDパイプライン
モノレポは、複数の論理プロジェクトを含む単一リポジトリです。モノレポ向けCI/CDパイプラインは、複数のプロジェクトにわたる変更を効率的に処理する必要があります。リポジトリ全体ではなく、コミットの影響を受けるプロジェクトのみのビルドとテストを実行する必要があります。
Bazel、GoogleのCloud Buildのような高度なCI/CDツールを使用すると、コードベースの依存関係グラフを作成して、コードベースの中で変更したコードに依存する部分のみのビルドとテストを再実行できます。
モノレポ向けCI/CDパイプラインのセキュリティは、変更が他のコンポーネントに影響するのを防ぎます。自動コードと静的コード分析は、パイプラインの早期段階で潜在的なセキュリティ問題を特定します。モノレポの完全性を維持するために、コード レビューを精力的に実施する必要があります。
クラウド上のCI/CD
クラウド プラットフォームは、無限の拡張性、高可用性、本来備わっている災害復旧メカニズムなど、CI/CDパイプラインを導入するための強力な機能を提供します。
クラウド リソースの弾力性は、ワークロードに基づくCI/CDの動的な拡張をサポートし、効率とコストの最適化を促進します。クラウド上のCI/CDは、さらに分散開発チームをサポートし、コラボレーションを強化して、グローバルなソフトウェア開発アプローチを支援します。
AWSでのCI/CD
Amazon Web Services (AWS)は、CI/CDパイプラインを導入するためのツール スイートを提供します。AWS CodeCommitは、フルマネージド ソース管理サービスです。安全なGitリポジトリをホストして、共同で行うコーディングとバージョン管理を促進します。
AWS CodeBuildは、マネージド ビルド サービスです。ソース コードをコンパイルし、テストを実行し、すぐに導入できるソフトウェア パッケージを生産します。AWS CodePipelineは、継続的インテグレーションと継続的デリバリー サービスです。ソース コードから導入までのワークフローのオーケストレーションを実行し、ソフトウェア リリース プロセスをモデル化、可視化、および自動化します。
AWS CodeDeployは、自動導入サービスです。Amazon EC2、AWS Lambda、Amazon ECSのような多様なAWSサービスへのアプリケーション導入を促進します。また、AWSは、人気のあるオープンソース ツールと統合し、柔軟で包括的なCI/CDソリューションを提供します。
AzureでのCI/CD
Azure Pipelinesは、継続的インテグレーションと継続的デリバリーの両方をサポートするクラウド サービスです。任意の言語およびプラットフォームと互換性があるため、多様な開発環境に合わせた多目的ソリューションを提供します。
Azure Reposは、クラウドでホスティングされるプライベートGitリポジトリを無制限に提供し、複数のチームのコラボレーションと効果的なコード管理を可能にします。Azure Test Plansは、テスト作業を管理、追跡、および計画する包括的なソリューションです。高品質なソフトウェアのデリバリーを保証します。
Azureは、さらに幅広い拡張機能や有名なオープンソース ツールとの統合を提供し、CI/CDプラットフォームとしてのその機能を強化しています。
Google CloudでのCI/CD
Cloud Build for CI/CDは、Google Cloud Platform (GCP)で提供されるサーバレス製品です。開発者は、クラウドでソフトウェアをビルド、テスト、および導入できます。Cloud Buildでは、VM、サーバレス、Kubernetes、Firebaseなど、複数の環境にわたってビルド、テスト、および導入するためのカスタム ワークフローを定義できます。
Google Cloud Source Repositoriesは、チームが1か所でコードの保存、管理、追跡を行うための場所です。安全でスケーラブルな高可用性Gitリポジトリを提供します。また、GCPは、Git、Jenkins、Spinnakerのような人気のあるオープンソース ツールと統合しており、柔軟でカスタマイズ可能なCI/CDソリューションを提供します。
IBM CloudでのCI/CD
IBM Cloudは、CI/CDパイプラインを導入するための一連の包括的なツールを提供します。IBM Cloud Continuous Deliveryサービスは、オープン ツールが統合され、アプリケーションのビルド、導入、および管理を自動化するテンプレートが含まれる、ツールチェーンを提供します。
IBM Cloud Code Engineは、フルマネージド サーバレス プラットフォームです。Webアプリ、マイクロサービス、イベント駆動型機能、バッチ ジョブなどのコンテナ化されたワークロードを実行します。また、IBM Cloudは、Git、Jenkins、Tektonのような人気のあるオープンソース ツールと統合しており、CI/CDを導入するための多目的な選択肢になります。
CI/CDパイプラインのベストプラクティス
DevOpsワークフローとソフトウェア デリバリーを強化するために、開発ライフサイクルに以下に示すベストプラクティスを組み込みます。
単一ソース リポジトリ
単一ソース リポジトリを使用することでソース コード管理(SCM)システムとして機能し、ビルドを作成するために必要なすべてのファイルとスクリプトを一元的に保管します。このリポジトリには、ソース コード、データベース構造、ライブラリからプロパティ ファイル、バージョン管理まで、すべてを含める必要があります。また、テスト スクリプトや、アプリケーションをビルドするためのスクリプトも保管する必要があります。
単一ソース リポジトリから作業することで、コラボレーションの強化、バージョン管理の簡素化、競合するリスクの軽減がもたらされ、変更を追跡しやすくなります。
ビルドは1回のみ
コードをコンパイルしてビルド アーティファクトを作成するのは1回だけで、それ以降はこのアーティファクトをパイプラインを通してプロモーションします。この手法は、すべての段階でコードをビルドする場合に発生する可能性がある不一致を防ぐことで、一貫性を高めます。
ビルド プロセスを自動化する
自動ビルドの手法、またはコードを導入可能なアーティファクトに変換することは、人的ミスを減らして、開発プロセスのスピードを向上させます。ビルド スクリプトは、Webサーバ ファイル、データベース スクリプト、アプリケーション ソフトウェアなど、すべてを1つのコマンドでビルドできる包括的なものにする必要があります。CIプロセスは、コードを自動的にパッケージ化してコンパイルし、使用可能なアプリケーションを生成する必要があります。
自動化作業の優先順位を設定する
コードの統合、テスト、導入からインフラストラクチャのプロビジョニング、設定まで、できる限り自動化します。自動化は、効率を向上させると同時に、再現性を保証します。開発者がコードを共有リポジトリにプッシュすると、CIサーバは自動的にビルドアンドテスト プロセスを起動し、問題があればその場で明確にします。このプロセスにより、手動で統合する場合にかかっていた時間と作業が大幅に削減されるため、開発者はコードの強化に集中できます。
早期段階で多数のテストを実施する
パイプラインの早期段階に自動テストを組み込みます。ビルド段階の後にユニット テストを実行し、その後に統合テストとエンドツーエンド テストを実行します。コードがテストに不合格だった場合は失敗したビルドを生成するように、テスト スクリプトを設計します。
複製したテスト環境を使用する
新しいコードを稼働中の本番環境でテストするのではなく、本番環境を複製した環境でテストを実施します。この複製した環境で厳格なテスト スクリプトを使用して、事前構築された初期テスト プロセスで見逃された可能性があるバグを検出および特定します。
頻繁に導入する
頻繁に導入することで、変更のバッチ サイズを縮小し、問題を特定および修正しやすくします。また、フィードバックが早くなり、ロールバックしやすくなり、ユーザーに価値を提供するまでの時間を短縮します。
導入にはCI/CDパイプラインのみを使用する
本番環境に手動で導入するのを禁止します。すべての変更がテストされ、一貫性があり、追跡可能であることを保証するために、すべての変更をパイプライン経由で処理する必要があります。
可視性を要求する
開発チームは、最新の実行可能ファイルにアクセスできるだけでなく、リポジトリに対するすべての変更を確認できる必要があります。開発者が最新バージョンを把握できるように、バージョン管理を使用してハンドオフを管理する必要があります。
フィードバック ループを最適化する
パイプラインが迅速かつ役に立つフィードバックを提供できるようにします。開発者は、その変更がビルドを破損した場合またはテストに不合格だった場合、即座に通知を受け取る必要があります。迅速なフィードバックは、迅速な修正を可能にし、パイプラインの流れを維持します。
リリースのたびに環境をクリーンアップする
各リリース後のテスト環境とステージング環境のクリーンアップを自動化することで、リソースを節約し、各導入環境をクリーンな状態から開始できます。
CI/CDパイプラインのKPI
サイクル時間または導入時間
サイクル時間は、導入時間とも呼ばれ、コードのコミットから本番環境導入までの所要時間を測定します。CI/CDパイプラインの効率を表す重要な指標です。サイクル時間が短いほど、ユーザーに早く価値を提供でき、開発者に早くフィードバックできます。
開発頻度
開発頻度とは、コード変更をバージョン管理システムにコミットする頻度を指します。開発頻度が高いことは、小規模で管理しやすい変更に関連する開発プロセスが活発に行われ、エラーのリスクを軽減していることを示します。
変更リード タイム
変更リード タイムは、変更がコミットされてから導入されるまでの期間を測定する、CI/CDパイプラインの速度の指標です。リード タイムが短いほど、価値が早く実現し、フィードバック ループが高速化します。
変更障害率
変更障害率は、本番環境で失敗する変更の割合です。変更障害率が低いことは、ソフトウェア デリバリー プロセスが高品質であることを示します。テスト品質、コード レビュー手法、および導入手法が変更障害率に影響を及ぼします。
MTTRとMTTFの比較
平均修復時間(MTTR)と平均故障時間(MTTF)には、CI/CDの信頼度が反映されます。MTTRは、故障から回復するまでの平均時間を測定します。MTTFは、故障と故障の間の平均時間を測定します。MTTRが低く、MTTFが高いほど、パイプラインの信頼度が高いことを示します。
CI/CDツール
継続的インテグレーション ツール
Codefresh
Codefreshは、Kubernetes向けに設計されたCI/CDプラットフォームです。アプリケーション開発のコミットから導入まで、ライフサイクル全体をサポートします。独特なDockerネイティブなインフラストラクチャで高速で分離されたビルドを可能にし、コンテナ化されたアプリケーションの開発、テスト、および導入のための多目的な環境を提供します。
Bitbucket Pipelines
Bitbucket Pipelinesは、Bitbucketに組み込まれた統合CI/CDサービスです。開発チームは、リポジトリの設定ファイルに基づいて、自動的にコードをビルド、テスト、および導入できます。BitbucketおよびAtlassianのツール スイートと緊密に統合されているため、Atlassianのエコシステムにすでに組み込まれているチームのワークフローを大幅に向上させることができます。
Jenkins
Jenkinsは、オープンソースのオートメーション サーバです。開発者は、信頼できる方法でソフトウェアをビルド、テスト、および導入できます。広範なプラグイン サポートと分散ビルドを提供する、複雑なCI/CDパイプライン向けの柔軟性の高いツールです。
CircleCI
CircleCIは、最新の継続的インテグレーションおよびデリバリー プラットフォームです。ソフトウェアの迅速な開発とリリースをサポートします。シンプルさと効率に重点を置いて、スマートな自動キャッシュ、並列処理、およびジョブ オーケストレーションを提供し、ソフトウェア デリバリー プロセスを最適化します。
Bamboo
BambooもAtlassianスイートに含まれるツールです。継続的インテグレーションおよびデリバリー機能を提供し、GitやJIRAとのソフトウェア統合が組み込まれています。Jenkinsほどの拡張性はありませんが、その機能はすぐに使用できるため、迅速でシンプルな導入を必要とする開発チームにとってわかりやすい設定を提供します。
GitLab CI
GitLab CIは、GitLabに不可欠な部分であり、DevOpsライフサイクル全体をサポートする堅牢なソリューションです。パイプライン設定に柔軟性があり、GitLabのソース管理および問題追跡と緊密に統合されているGitLab CIは、ソフトウェアの開発と導入のためのオールインワンのソリューションを提供します。
継続的デリバリー/デプロイメント ツール
Codefresh
Codefreshは、CI機能を提供するだけでなく、継続的デリバリーもサポートします。その環境分離とHelmチャートのサポートにより、Kubernetesアプリケーションを効率的に信頼できる方法で配信できます。
Argo CD
Argo CDは、Kubernetes向けの宣言型GitOps継続的デリバリー ツールです。アプリケーションを定義する場合の信頼できる唯一の情報源としてGitリポジトリを使用し、リポジトリで変更が検出された場合は自動的にアプリケーションを同期します。
GoCD
GoCDは、継続的デリバリーのための複雑なワークフローのモデル化と可視化に特化したオープンソース ツールです。バリュー ストリーム マップは、コミットから導入までの経路全体を可視化し、ソフトウェア デリバリー プロセスに対する理解を深め、制御しやすくします。
AWS CodePipeline
AWS CodePipelineは、フルマネージド継続的デリバリー サービスです。迅速で信頼できるアプリケーション更新をリリースするパイプラインを自動化します。AWSスイートの一部として他のAWSサービスとシームレスに統合されているため、AWSエコシステム内でリリース プロセス全体を効果的に管理および自動化できます。
Azure Pipelines
Azure Pipelinesは、MicrosoftのAzure DevOpsサービスに含まれるクラウド サービスです。あらゆる言語とプラットフォームのアプリケーション向けにCI/CD機能を提供します。開発分野で最も広く使用されているツールやサービスと連携できる幅広い統合機能およびオープンソース プロジェクトを無料で時間無制限でビルドできることで知られています。
Spinnaker
Spinnakerは、元々Netflixが開発したマルチクラウド継続的デリバリー プラットフォームです。多様なクラウド プロバイダにわたる高い設定可能性と強力なデプロイメント機能を提供します。導入に重点を置いて、ブルー/グリーン、カナリア リリースなど、多様な戦略をサポートし、デリバリー プロセスに対する高度な制御機能を提供します。
機械学習CI/CDアプリケーション
MLOps
機械学習と運用が複合したMLOpsは、機械学習モデルの開発と導入のライフサイクルを標準化および合理化するように設計されています。CI/CD原則を適用して、機械学習モデルのテスト、導入、および監視を自動化し、信頼できる一貫したデリバリーを促進します。
合成データ生成手法
機械学習開発において、合成データ生成は、実データを模倣するデータを作成する手法です。このアプローチは、CI/CDパイプライン内で、モデルのパフォーマンスと網羅性を評価するためのスケーラブルでプライバシーを順守する手法を提供するため、機械学習モデルをテストする際に役立ちます。
AIOpsプラットフォーム
AIOps (Artificial Intelligence for IT Operations)は、AIと機械学習テクノロジをIT運用に統合します。CI/CDのコンテキストにおいて、AIOpsは、異常検出、イベント相関、根本原因分析など、多数の運用タスクを自動化および強化して、ソフトウェア デリバリーの効率と有効性を向上させます。
CI/CDのセキュリティ
CI/CDの速度と自動化は、以下のような新しいセキュリティ リスクをもたらします。
- 機密データの露出
- 安全でないサードパーティ コンポーネントの使用
- CI/CDツールが正しく保護されていない場合の不正アクセス
しかし、パイプライン全体にセキュリティの手法とツールを統合してCI/CDセキュリティを優先すること(DevSecOpsとして知られる手法)により、デリバリーするソフトウェアが機能し、安全であることを保証できます。
安全なコーディング手法
開発者は、コードベースにセキュリティの脆弱性を持ち込むのを防ぐために、安全なコーディング手法を維持する必要があります。優先すべき手法には、入力検証、正しいエラー処理、最小権限の原則などがあります。
セキュリティ テスト
自動化したセキュリティ テストをCI/CDパイプラインに統合します。静的コード分析、動的分析、侵入テストなどのテストは、アプリケーションを導入する前にセキュリティの脆弱性を特定するのに役立ちます。
導入のセキュリティ
導入プロセスに対策を施します。データ転送に安全なプロトコルを使用し、導入プロセス中の権限とアクセス制御を管理し、本番環境でアプリケーションを監視してセキュリティ インシデントを検出します。
安全なCI/CDパイプライン アーキテクチャ
安全なCI/CDパイプライン アーキテクチャは、パイプラインの各段階にセキュリティ制御を統合しています。ソース管理に安全なリポジトリを使用し、ビルド プロセス中にセキュリティ チェックを実施し、自動セキュリティ テストを実行し、安全な導入手法を実施します。
Infrastructure as Codeのセキュリティ
Infrastructure as code (IaC)は、DevOpsの重要な手法であり、機械処理可能な定義ファイルからコンピューティング インフラストラクチャを管理およびプロビジョニングします。IaCのセキュリティには、これらの定義ファイルおよびそこから作成されるインフラストラクチャを管理することが含まれます。機密データを暗号化し、IaCファイルへのアクセスを制限し、定期的にインフラストラクチャのセキュリティ コンプライアンスを監査します。
今後のCI/CDの動向
マイクロサービスとサーバレス アーキテクチャ
マイクロサービスとサーバレス アーキテクチャを採用する組織が増えており、CI/CDパイプラインは複雑化する導入を管理するために適応する必要があります。これには、使用するテクノロジと導入プラットフォームが異なる可能性がある複数の独立したサービスを導入および管理することが含まれます。
人工知能と機械学習
CI/CDパイプラインを最適化するために、AIとMLが使用されることが増えています。CI/CDでのAIとMLの適用例として、潜在的な問題の予測と防止、リソース使用の最適化、複雑化するタスクの自動化などがあります。
Infrastructure as Code (IaC)
IaCは、DevOpsの標準的な手法になりつつあります。IaCのツールと手法が成熟するのに伴い、CI/CDパイプラインにおけるそれらの役割もますます重要になっています。
CI/CDパイプラインについてのFAQ
- 上記のプロセスを合理化する
- 上記のプロセスを確実に正しい順序で実行する
- 作業間の依存関係を処理する
Jenkins、CircleCI、およびBambooは、パイプラインのオーケストレーションで広く使用されているCI/CDツールです。Kubernetesもこの目的で、特にマイクロサービス アーキテクチャで、使用されることが増えています。
バリュー ストリーム マッピング(VSM)は、製品を概念からデリバリーまで移行させる一連のイベントについて、現在の状態を分析し、将来の状態を設計するための無駄のない管理手法です。CI/CDに関しては、開発から本番環境まで、コード変更の流れを可視化し、プロセスのボトルネック、冗長性、または無駄を特定します。チームがデリバリー ライフサイクル全体を理解し、流れの効率を向上させ、リード タイムを短縮するのに役立ちます。
バリュー ストリームをマッピングすることで、データに基づいてCI/CDパイプラインを最適化するための判断を下すことができ、ビジネス目標との一致度を高めることができます。