Skip to main content

Cloud Deploy


1 - Overview

Cloud Deploy is a managed continuous delivery service for deploying applications to GKE, Cloud Run, and other targets.


2 - Concepts

2.1 Components

ComponentDescription
Delivery PipelineDefines the deployment stages
TargetDestination (GKE cluster, Cloud Run)
ReleaseDeployable version of the application
RolloutDeployment of a release to a target

2.2 Deployment flow


3 - Configuration

3.1 Delivery Pipeline

# clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: my-app-pipeline
description: Deployment pipeline for my-app
serialPipeline:
stages:
- targetId: dev
profiles: [dev]
- targetId: staging
profiles: [staging]
- targetId: production
profiles: [production]
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: my-app
deployment: my-app
canaryDeployment:
percentages: [10, 50]
verify: true

3.2 Targets

# targets.yaml
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: dev
description: Development cluster
gke:
cluster: projects/mon-projet/locations/europe-west1/clusters/dev-cluster
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: staging
description: Staging cluster
gke:
cluster: projects/mon-projet/locations/europe-west1/clusters/staging-cluster
requireApproval: true
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: production
description: Production cluster
gke:
cluster: projects/mon-projet/locations/europe-west1/clusters/prod-cluster
requireApproval: true

3.3 Cloud Run Target

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: production-cloudrun
description: Cloud Run production
run:
location: projects/mon-projet/locations/europe-west1

4 - Skaffold

Cloud Deploy uses Skaffold for rendering and deployment.

4.1 skaffold.yaml

apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: my-app
profiles:
- name: dev
manifests:
kustomize:
paths:
- kubernetes/overlays/dev
- name: staging
manifests:
kustomize:
paths:
- kubernetes/overlays/staging
- name: production
manifests:
kustomize:
paths:
- kubernetes/overlays/production
deploy:
kubectl: {}

4.2 Kustomize structure

kubernetes/
├── base/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── kustomization.yaml
└── overlays/
├── dev/
│ └── kustomization.yaml
├── staging/
│ └── kustomization.yaml
└── production/
└── kustomization.yaml

5 - Create and deploy

5.1 Apply the configuration

# Create the pipeline and targets
gcloud deploy apply --file=clouddeploy.yaml --region=europe-west1
gcloud deploy apply --file=targets.yaml --region=europe-west1

5.2 Create a release

# From Cloud Build
gcloud deploy releases create release-001 \
--project=mon-projet \
--region=europe-west1 \
--delivery-pipeline=my-app-pipeline \
--images=my-app=europe-west1-docker.pkg.dev/mon-projet/images/my-app:v1.0.0

5.3 Cloud Build integration

# cloudbuild.yaml
steps:
- name: 'gcr.io/cloud-builders/docker'
args: ['build', '-t', '${_IMAGE}', '.']

- name: 'gcr.io/cloud-builders/docker'
args: ['push', '${_IMAGE}']

- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: 'gcloud'
args:
- 'deploy'
- 'releases'
- 'create'
- 'release-$SHORT_SHA'
- '--delivery-pipeline=my-app-pipeline'
- '--region=europe-west1'
- '--images=my-app=${_IMAGE}'

substitutions:
_IMAGE: 'europe-west1-docker.pkg.dev/$PROJECT_ID/images/my-app:$COMMIT_SHA'

6 - Promotions and rollbacks

6.1 Promote a release

# Promote to the next target
gcloud deploy releases promote \
--release=release-001 \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1

# To a specific target
gcloud deploy releases promote \
--release=release-001 \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1 \
--to-target=production

6.2 Approve a deployment

# List rollouts pending approval
gcloud deploy rollouts list \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1 \
--filter="state=PENDING_APPROVAL"

# Approve
gcloud deploy rollouts approve rollout-001 \
--delivery-pipeline=my-app-pipeline \
--release=release-001 \
--region=europe-west1

6.3 Rollback

# Create a rollback to a previous release
gcloud deploy targets rollback production \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1

# Or promote an older release
gcloud deploy releases promote \
--release=release-000 \
--delivery-pipeline=my-app-pipeline \
--region=europe-west1 \
--to-target=production

7 - Deployment strategies

7.1 Rolling Update (default)

stages:
- targetId: production
strategy:
standard:
verify: true

7.2 Canary

stages:
- targetId: production
strategy:
canary:
runtimeConfig:
kubernetes:
serviceNetworking:
service: my-app
deployment: my-app
canaryDeployment:
percentages: [10, 25, 50, 75]
verify: true

8 - Notifications

# Configure Pub/Sub notifications
gcloud deploy delivery-pipelines update my-app-pipeline \
--region=europe-west1 \
--notification-config-topic=projects/mon-projet/topics/deploy-notifications

Summary

In this chapter, we learned:

  • The concepts of Cloud Deploy
  • The configuration of pipelines and targets
  • Integration with Skaffold
  • Releases and how to manage them
  • Promotions and rollbacks
  • Deployment strategies

Next step

In the next chapter, we will look at Google Kubernetes Engine (GKE).

→ Next chapter: GKE


← Back to table of contents