このページでは、Google Cloud Deploy を使用してアプリケーションを目的のランタイム環境に取り込む方法について説明します。
Google Cloud Deploy では、いくつかのデプロイターゲットを順番に進めてアプリケーションを取得します。このページではプロセスの概要を説明します。
このページで説明するプロセスでは、デリバリー パイプラインを作成し、1 つ以上の YAML 構成ファイルを使用してターゲットを定義します。その後、パイプラインを登録し、そのパイプラインでデプロイが管理されるリリースとしてアプリケーションを送信します。
始める前に
デプロイするコンテナ イメージと、コンテナ イメージを識別する Kubernetes マニフェストを用意します。
イメージをビルドして配置するには、継続的インテグレーション パイプラインまたは他のプロセスが必要です。CI ツールは、Cloud Build、Jenkins、または Google Cloud Deploy デリバリー パイプラインに提供するコンテナ イメージを生成するものすべてです。
skaffold.yaml
構成ファイルをまだ作成していない場合は作成します。これにより、Kubernetes アプリケーションのレンダリングとデプロイの方法が Google Cloud Deploy に指示されます。Google Cloud Deploy は
skaffold render
を呼び出し、このファイルとskaffold apply
を使用して Kubernetes マニフェストをレンダリングし、ターゲットにデプロイします。skaffold.yaml
ファイルは、次の例のように、最初の行でサポートされているバージョンに対応する名前空間を参照する必要があります。apiVersion: skaffold/v2beta16
skaffold.yaml
ファイルがない場合は、skaffold init
を使用して生成できます。詳細については、Google Cloud Deploy での Skaffold の使用をご覧ください。Helm、Kustomize、kpt などのマニフェスト管理ツールで Skaffold と Google Cloud Deploy を使用する方法については、Google Cloud Deploy でのマニフェストの管理をご覧ください。
実行サービス アカウントに必要な IAM ロールと権限があることを確認します。
デリバリー パイプラインの作成
デリバリー パイプラインでは、デプロイ ターゲットの進行が記述されます。これらのターゲットは、デリバリー パイプラインと同じファイル、または 1 つ以上の別のファイルで定義できます。
デリバリー パイプラインとターゲット定義ファイルを作成したら、これらのファイルに対して gcloud deploy apply
を実行して、ファイルを Google Cloud Deploy リソースとして登録します。
デリバリー パイプラインとターゲットの定義
デリバリー パイプラインの構成ファイルの構造については、こちらをご覧ください。
このファイルの名前は任意です。一般に、ターゲット定義を含むデリバリー パイプライン構成は clouddeploy.yaml
と呼ばれ、代わりに 1 つ以上の別のファイルで定義されたターゲットを参照するものは delivery-pipeline.yaml
と呼ばれます。
デリバリー パイプラインとターゲットの登録
デリバリー パイプラインを Google Cloud Deploy に登録するには、個別の定義ファイルごとに gcloud deploy apply
を 1 回実行します。つまり、3 つのファイルで 3 つのターゲットを定義する場合は、コマンドを 4 回(デリバリー パイプラインに対して 1 回、各ターゲットに対して 1 回ずつ)実行します。
次のコマンドは、同じファイルで定義されているターゲットとともにデリバリー パイプラインを登録します。
gcloud deploy apply --file=PIPELINE_CONFIG \
--region=LOCATION
--project=PROJECT
これで、リリースのデプロイを管理できるデリバリー パイプラインと、同じプロジェクトとリージョン内のデリバリー パイプラインで使用できるターゲット リソースが作成されました。
単一ファイルの例
この例のコマンドは、すべて同じファイルで定義されているデリバリー パイプラインとターゲットを登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1
個別のファイルを使用した例
この例では、3 つのターゲットが 3 つの個別のファイルで定義されているため、次の 4 つのコマンドを実行します。
gcloud deploy apply --file=delivery-pipeline.yaml --region=us-central1 && \
gcloud deploy apply --file=target_dev.yaml --region=us-central1 && \
gcloud deploy apply --file=target_staging.yaml --region=us-central1 && \
gcloud deploy apply --file=target_prod.yaml --region=us-central1
デフォルト(gcloud
config set deploy/region [REGION]
を使用)を設定しない限り、--region
フラグが必要です。リージョンは、デリバリー パイプラインと、パイプラインが参照するすべてのターゲットに対して同じにする必要があります。
既存のパイプラインとターゲットの編集
後で任意のデリバリー パイプラインまたはターゲット構成を編集し、gcloud
deploy apply
を実行してパイプラインまたはターゲット リソースを更新できます。ただし、これらの変更は元のデリバリー パイプラインによって管理されるため、既存のリリースには影響しません。
デプロイに対して手動で承認する必要がある
特定のターゲットに対して手動での承認を要求するには、次のプロパティをターゲット定義に含めます。
requireApproval: true
デフォルトは false
です。デリバリー パイプライン構成でこのプロパティを省略した場合、または値を指定しなかった場合、このターゲットへのデプロイに承認は必要ありません(ただし、ターゲットに昇格しようとする呼び出し元には、引き続き clouddeploy.rollouts.create
IAM 権限が必要です)。
最初のターゲットに対する手動での承認を要求することもできます。CLI を使用して最初のターゲットに対してリリースを作成すると、rollout
が自動的に作成されます。承認が必要な場合、Google Cloud Deploy は rollout
を作成しますが、承認が付与されるまでリリースが保留状態となります。
デリバリー パイプラインを呼び出してアプリケーションをデプロイする
作成したデリバリー パイプラインに従って、デプロイするアプリケーションを送信できるようになりました。
通常の継続的インテグレーション(CI)プロセスを実行し、デプロイ可能なアーティファクトを作成します。
Google Cloud Deploy を呼び出してリリースを作成し、デリバリー パイプラインを開始します。
Skaffold 構成を含むディレクトリから次のコマンドを実行します。
gcloud deploy releases create RELEASE_NAME --delivery-pipeline=PIPELINE_NAME
ここで
RELEASE_NAME
は、このリリースに付ける名前です。この名前は、このデリバリー パイプラインのすべてのリリース間で一意である必要があります。PIPELINE_NAME
は、ターゲットの進行を通して、このリリースのデプロイを管理するデリバリー パイプラインの名前です。この名前は、パイプライン定義のname
フィールドと一致する必要があります。
このコマンドは、構成ファイルを含む tarball を Cloud Storage バケットにアップロードして、リリースを作成します。Google Cloud Deploy は、自動的にロールアウトを作成し、デリバリー パイプラインで定義された最初のターゲットにイメージをデプロイします。
このコマンドで示されるパラメータに加えて、次のオプションのいずれかを含めることが可能です。
--images=<name=path/name:$IMAGE_SHA>,<name=path/name:$IMAGE_SHA>
イメージ名のフルパスを置換するイメージ名のコレクション。
--build_artifacts=<path/file>
Skaffold ビルド アーティファクト出力ファイルへの参照。これは、イメージのフルパスの置換を表すために渡すことができます。
この 2 つのオプションは相互に排他的です。
リリース版をプロモートする
リリースがデリバリー パイプラインで定義されたターゲットにデプロイされると、次のターゲットに昇格できます。
gcloud
gcloud deploy releases promote --release=RELEASE_NAME --delivery-pipeline=PIPELINE_NAME
ここで
RELEASE_NAME
は、昇格させるリリースの名前です。
PIPELINE_NAME
は、このリリースのデプロイを管理するために使用するデリバリー パイプラインの名前です。
Console
デリバリー パイプラインのリストに表示されているパイプラインをクリックします。
デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。
デリバリー パイプラインの可視化の最初のターゲットで、[Promote] をクリックします。
[Promote release] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。
[Promote] をクリックします。
リリースの作成後にデリバリー パイプラインまたはターゲットが変更された場合、Google Cloud Deploy は不一致の可能性を示すメッセージを返し、プロモーションを確認するプロンプトを表示します。続行する前に、プロンプトに n
と応答して、パイプラインのバージョンの違いを確認できます。いずれにしても、リリースが作成された時点で定義されていたリリース パイプラインに従ってリリースがデプロイされます。パイプラインの不一致の詳細については、リリースあたりのパイプライン インスタンス数をご覧ください。
Google Cloud Deploy は、リリース先のターゲットにリリースの rollout
を作成し、リリースがデプロイのためにキューに入れられます。デプロイされると、デリバリー パイプラインの可視化にその事実が表示されます。
プロモーションの承認
各ターゲットは、そのリリースをデプロイする前に承認する必要があります。
承認が必要なターゲットに昇格させると、Google Cloud Deploy は Pub/Sub メッセージを cd-approvals
トピックに公開します。
承認の仕組みの詳細については、ロールアウトの承認または拒否をご覧ください。
手動でのデプロイ
通常の使用では、Google Cloud Deploy は、順に進行中の各ターゲットにアプリケーションをデプロイします。また、定義した任意のターゲットにアプリケーションを手動でデプロイすることもできます。
新規または既存のリリースを手動でデプロイできます。
既存のリリースの手動デプロイ
リリースがすでに作成されている場合は、意図したターゲットに昇格できます。
gcloud deploy releases promote --release=RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --to-target=TARGET_NAME
ここで
RELEASE_NAME は、意図したターゲットに手動で昇格させるリリースの名前です。
PIPELINE_NAME は、オーバーライドする自動デプロイの進行状況を記述するデリバリー パイプラインの名前です。
TARGET_NAME は、手動でデプロイするターゲットの名前です。
新しいリリースの手動デプロイ
デフォルトでは、リリースを作成すると、Google Cloud Deploy はプロモーション シーケンスの最初のターゲットに自動的にデプロイします。ただし、最初のターゲット以外のターゲットを指定することもできます。
デフォルトの進行中の最初のターゲットと同様に、Google Cloud Deploy によって、指定したターゲットの rollout
が自動的に作成され、リリースがデプロイされます。
新しいリリースを手動でデプロイするには、次のコマンドを実行します。
gcloud deploy releases create --release=RELEASE_NAME --delivery-pipeline=PIPELINE_NAME --to-target=TARGET_NAME
ここで
RELEASE_NAME は、意図したターゲットに手動で昇格させるリリースの名前です。
PIPELINE_NAME は、オーバーライドする自動デプロイの進行状況を記述するデリバリー パイプラインの名前です。
TARGET_NAME は、手動でデプロイするターゲットの名前です。
手動でのデプロイが進捗状況に与える影響
手動で特定のターゲットにデプロイし、ターゲットを指定せずにリリースを昇格させると、Google Cloud Deploy は進行中の正しい次のターゲットにそれを昇格させます。これは、リリースがデプロイされた最も遠いターゲットをサービスが追跡しているためです。進行中の最後のターゲットにリリースがすでに存在する場合、Google Cloud Deploy は、昇格先のターゲットが他にはないことを示すメッセージを返します。
次のステップ
- デリバリー パイプラインを管理する方法を学習する。