このドキュメントでは、アプリケーションをデプロイするために Cloud Deploy が連携する外部システムとの関係について説明します。これらのシステムは、他の Google Cloud サービスとサードパーティのツールです。
概要
次の図は、Cloud Deploy と、Cloud Deploy が依存する個別のシステムとの関係を示しています。
この図に示すように、Cloud Deploy は次のシステムとやり取りします。
CI システム
Cloud Deploy は、CI プロセスからの 1 つの出力が、リリースを作成するための Cloud Deploy API または CLI の呼び出しである限り、ほとんどの CI ツールをサポートしています。
-
Cloud Deploy は、Cloud Build を呼び出してマニフェストをレンダリングし、ターゲット ランタイムにデプロイします。
-
Cloud Deploy は Cloud Build を介して Skaffold を使用し、マニフェストをレンダリングしてデプロイすることで、アプリケーションをデプロイします。
-
Cloud Deploy は、レンダリング ソースとレンダリングされたマニフェストを Cloud Storage バケットに保存します。
Google Cloud Observability と Cloud Audit Logs。
Google Cloud Observability はロギングデータを収集し、Cloud Deploy で利用できるようにします。
監査ロギングもご覧ください。
-
Cloud Deploy は、複数の Pub/Sub トピックにメッセージを公開します。このサービスを使用して、外部のワークフロー、テスト、その他の関連システムと統合できます。
詳細については、Cloud Deploy 通知のサブスクライブ をご覧ください。
ターゲット ランタイム
Cloud Deploy は Cloud Build を介して
skaffold applyを使用し、アプリケーションをターゲット ランタイム(GKE または GKE Enterprise)にデプロイします。
Cloud Deploy リソース
次の図は、Cloud Deploy がアプリケーションの配信に使用するリソースと、それらのリソース間の関係を示しています。
上の図に示すように、リソース間の関係は次のとおりです。
デリバリー パイプラインでは、0 個以上のリリースを生成できます。また、マルチターゲットや、それに関連付けられた 子ターゲットなど、その 1 つ以上のターゲットを参照できます。
デリバリー パイプラインは、Cloud Deploy リソースに対するアクションを自動化する 1 つ以上の自動化を参照することもできます。
各リリースには、パイプライン インスタンス(リリースの作成時に構成されたデリバリー パイプラインとターゲットの「スナップショット」)が含まれます。
各リリースは 0 個以上のロールアウトを生成し、0 個以上のアーティファクトを参照できます。
各ロールアウトには、少なくとも 1 つのフェーズが含まれます。これは、論理的にグループ化されたロールアウト内のオペレーション(ジョブ)のコレクション(デプロイ、デプロイと検証など)を表します。
各フェーズには 1 つ以上のジョブが含まれます。これは、ロールアウトで実行される内容(デプロイまたは検証)を表します。各ジョブには、ジョブのインスタンスである 1 つ以上のジョブ実行(デプロイの試行など)を含めることができます。ジョブ実行は、ロールアウトの子リソースです。
並行デプロイに使用されるマルチターゲットは、コントローラのロールアウトを作成します。コントローラのロールアウトは、子ロールアウトを作成し、それは子ターゲットに対応します。
各ロールアウトは 1 つのターゲットに関連付けられます。
各ターゲットは、1 つの GKE クラスタまたは Anthos クラスタ、アプリケーションのその他のランタイムの宛先に関連付けられます。
ターゲットは、1 つ以上のデリバリー パイプラインに関連付けることができます。
アーティファクトは、ロールアウトの一部としてターゲット ランタイムにデプロイされる CI プロセスからの出力(コンテナ イメージなど)です。
また、ロールアウトには 1 つ以上のフェーズがあり、フェーズには 1 つ以上のジョブと 1 つ以上のジョブ実行があります。
この図に示すように、ロールアウトには次のものが含まれます。
フェーズ
フェーズには 1 つ以上のジョブ(デプロイ、デプロイと検証など)が含まれます。 各ロールアウトには 1 つ以上のフェーズがあります。フェーズは、ロールアウトのサブメッセージです。
Jobs
ロールアウト時に実行される特定のオペレーション(デプロイ、検証など)。ジョブは、ロールアウトのサブメッセージです。
JobRun
ジョブのインスタンス(検証の試行など)。各ジョブには 0 個以上の JobRun を設定できます。JobRun はロールアウトの子リソースです。
自動化には自動化ルールが含まれており、0 個以上の AutomationRun リソースで参照できます。AutomationRun は、実行された自動化ルールのインスタンスです。たとえば、あるターゲットから別のターゲットへの自動プロモーションなどです。Automation リソースと AutomationRun リソースは、デリバリー パイプラインの下にあるピア子リソースです。
組み合わせてリリースを配信する仕組み
このセクションでは、Cloud Deploy がこのドキュメントに記載されているコンポーネントとやり取りして、リリースとしてのアプリケーションの配信を自動化する方法について説明します。
CI システムが Cloud Deploy デリバリー パイプラインを呼び出します。
CI プロセスは、CLI または API を使用して Cloud Deploy を呼び出し、新しいリリースを作成して、ビルド アーティファクトまたはイメージへの参照を渡します。
CI システムの統合の詳細については、Cloud Deploy と他のシステムを統合するをご覧ください。
新しいリリースが作成されると、Cloud Deploy は次の処理を行います。
リリースの一部としてデリバリー パイプラインのインスタンスを保存します。
このパイプライン インスタンスは、デリバリー パイプラインの構成が変更されても、このリリースでは変更されません。詳細については、リリースあたりのパイプライン インスタンスをご覧ください。
また、Skaffold バージョンはリリースの一部として保存されます。ほとんどの場合、これはデフォルトの Skaffold バージョンになりますが、他のバージョンを指定できるため、その情報が保存されます。
Cloud Build を呼び出し、Cloud Storage から Skaffold レンダリング ソースを取得します。
Cloud Deploy は、レンダリング ソースをデフォルトまたは代替の Cloud Storage バケットに保存します。
skaffold diagnose(リリースの作成時に保存された Skaffold バージョンを使用)を呼び出して、有効なマニフェストを 1 つ生成します。renderオペレーションを呼び出します。組み込みターゲットを使用している場合、Cloud Deploy は
skaffold renderを呼び出して、指定されたイメージまたはビルド アーティファクトを使用してマニフェストをレンダリングします。Cloud Deploy では、spec.templates.spec.containers.imageのイメージ名を、gcloud deploy releases createコマンドで指定された、またはこのコマンドで参照されるビルド アーティファクト ファイル内の完全なイメージパス(ダイジェストまたはタグを含む)に置き換えます。カスタム ターゲットを使用している場合、Cloud Deploy はカスタム ターゲット タイプに対して定義された
renderオペレーションを呼び出します。Cloud Deploy は、レンダリングされたマニフェストをデフォルトまたは代替の Cloud Storage バケットに保存します。
Cloud Deploy は、デフォルトまたは代替の実行環境を使用してこれらのアクションを実行します。
(リリースの作成後に自動的に、または後でオンデマンドで)ロールアウトが作成されると、Cloud Deploy は次の処理を行います。
デプロイ前フックが指定されている場合は、そのフックを呼び出します。
カナリア デプロイ戦略を使用している場合、デプロイ前フックは最初のフェーズの開始時に呼び出されます。
deployオペレーションを呼び出します。組み込みターゲットを使用している場合、Cloud Deploy は
skaffold applyを呼び出して、最初のターゲットへのロールアウトを自動的に作成してデプロイします。組み込みターゲットを使用している場合、最初のロールアウトはリリースの作成時に自動的に作成されます。カスタム ターゲットを使用している場合、Cloud Deploy は自動的に最初のターゲットへのロールアウトを作成し、カスタム ターゲット タイプに対して定義された
deployオペレーションを呼び出します。組み込みターゲットとカスタム ターゲットの場合、コマンドラインを使用してリリースを作成する場合にのみ、最初のターゲットへのロールアウトが自動的に行われます。
最初のターゲットにデプロイするプロセスは、次のステップで説明する昇格と同じです。
verifyがデリバリー パイプライン構成内のターゲット用のtrueで、検証が Skaffold 構成で指定されている場合、skaffold verifyを呼び出します。verifyが指定されている場合、デプロイ後フックが指定されていれば、verifyの後に呼び出します。それ以外の場合は、デプロイ後フックはdeployの後に呼び出されます。カナリア デプロイ戦略を使用している場合、デプロイ後フックは最終ロールアウト フェーズの最後のジョブとして実行されます。
リリースを次のターゲットにプロモートするときに、Cloud Build は Cloud Storage からターゲット固有のマニフェストを取得します。次に、Cloud Build は
skaffold applyを呼び出して、レンダリングされたマニフェストを指定されたターゲット ランタイムに適用します。ターゲットで承認が必要な場合は、CLI またはコンソールを使用して承認または拒否できます。
また、Cloud Deploy は Pub/Sub メッセージを生成します。このメッセージをサブスクライブして、承認ワークフローを自動的に開始できます。
Cloud Deploy は、このリリースに関連付けられている Skaffold バージョンとパイプライン インスタンスを使用して、デフォルトまたはカスタムの実行環境でこの手順を実行します。
このプロセスは、昇格だけでなく、ロールバックや再デプロイにも適用されます。
このサービスは、Cloud Deploy オペレーション全体を通して、複数の Pub/Sub トピックに通知を送信します(たとえば、ロールアウトが承認を必要とする場合)。
この統合やその他の統合については、Cloud Deploy と外部システムの統合で詳しく説明されています。
自動化を指定して、デリバリー パイプライン内でさまざまなオペレーションを自動的に実行できます。これらは指定した時間に実行できます。
automationRunは、自動化ルールの実行を表します。このサービスは、Cloud Deploy オペレーションを通して、プラットフォーム ログと監査ログを Google Cloud Observability と Cloud Audit Logs に書き込みます。
これらすべての手順を通して、Identity and Access Management を使用して、フロー制御とリソースへのアクセスが制限されます。
次のステップ
Cloud Deploy を他のシステムと統合する方法の詳細を確認する
Skaffold バージョンのライフサイクルに関する重要な情報を確認する。
Cloud Deploy の実行環境について学習する。
Google Cloud CI/CD ツールを組み合わせてソフトウェアを効果的に開発し、GKE に提供する方法を確認する。