GCP for DevOps — Cloud Deploy

2 minute read

Cloud Deploy

Cloud Deploy is Google Cloud’s managed continuous delivery service. It defines a delivery pipeline with ordered stages (dev → staging → production) and promotes releases through each stage with optional approvals.

How Cloud Deploy Works

┌──────────────────────────────────────────────────────┐
│             Cloud Deploy Pipeline                     │
├──────────────────────────────────────────────────────┤
│                                                       │
│  Cloud Build                                          │
│     │  (creates release)                              │
│     ▼                                                 │
│  ┌─────────┐   promote   ┌──────────┐   promote     │
│  │   Dev    ├────────────►│ Staging  ├──────────►    │
│  │ Target   │             │ Target   │  (approval)   │
│  └─────────┘             └──────────┘               │
│                                          │            │
│                                          ▼            │
│                                    ┌──────────┐      │
│                                    │Production│      │
│                                    │ Target   │      │
│                                    └──────────┘      │
│                                                       │
│  Targets: GKE clusters, Cloud Run services,          │
│           Anthos clusters, Custom targets             │
└──────────────────────────────────────────────────────┘

Define a Delivery Pipeline

# clouddeploy.yaml
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
  name: my-app-pipeline
description: "Pipeline for my-app"
serialPipeline:
  stages:
    - targetId: dev
      profiles: [dev]
    - targetId: staging
      profiles: [staging]
    - targetId: production
      profiles: [production]
      strategy:
        canary:
          runtimeConfig:
            cloudRun:
              automaticTrafficControl: true
          canaryDeployment:
            percentages: [25, 50, 75]
            verify: true
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: dev
description: "Development GKE cluster"
gke:
  cluster: projects/my-project/locations/us-central1/clusters/dev-cluster
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: staging
description: "Staging GKE cluster"
gke:
  cluster: projects/my-project/locations/us-central1/clusters/staging-cluster
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: production
description: "Production GKE cluster"
requireApproval: true
gke:
  cluster: projects/my-project/locations/us-central1/clusters/prod-cluster

Register the Pipeline

# Apply the delivery pipeline and targets
$ gcloud deploy apply --file=clouddeploy.yaml \
    --region=us-central1

# List pipelines
$ gcloud deploy delivery-pipelines list --region=us-central1

NAME              DESCRIPTION
my-app-pipeline   Pipeline for my-app

# Describe a pipeline
$ gcloud deploy delivery-pipelines describe my-app-pipeline \
    --region=us-central1

Create a Release

# Create a release (triggered by CI or manually)
$ gcloud deploy releases create release-v1-0-0 \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1 \
    --images=my-app=us-central1-docker.pkg.dev/my-project/my-repo/my-app:v1.0.0

# This automatically deploys to the first target (dev)

# List releases
$ gcloud deploy releases list \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1

Promote Between Stages

# Promote from dev to staging
$ gcloud deploy releases promote \
    --release=release-v1-0-0 \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1

# Promote from staging to production (requires approval)
$ gcloud deploy releases promote \
    --release=release-v1-0-0 \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1

# Approve a rollout (for production with requireApproval: true)
$ gcloud deploy rollouts approve rollout-abc123 \
    --release=release-v1-0-0 \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1

Cloud Run Target

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
  name: run-production
description: "Cloud Run production"
run:
  location: projects/my-project/locations/us-central1
requireApproval: true

Rollbacks

# Rollback to a previous release
$ gcloud deploy targets rollback production \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1

# Or create a new release from a known-good image
$ gcloud deploy releases create release-rollback \
    --delivery-pipeline=my-app-pipeline \
    --region=us-central1 \
    --images=my-app=us-central1-docker.pkg.dev/my-project/my-repo/my-app:v0.9.0

Integration with Cloud Build

# cloudbuild.yaml — CI + CD trigger
steps:
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$SHORT_SHA', '.']

  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$SHORT_SHA']

  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - 'deploy'
      - 'releases'
      - 'create'
      - 'release-$SHORT_SHA'
      - '--delivery-pipeline=my-app-pipeline'
      - '--region=us-central1'
      - '--images=my-app=us-central1-docker.pkg.dev/$PROJECT_ID/my-repo/my-app:$SHORT_SHA'

Common Mistakes

Mistake Why It’s Wrong Fix
No approval on production Accidental prod deployments Set requireApproval: true
Skipping staging Issues hit production Always promote through all stages
No rollback plan Stuck with bad release Test rollback procedures
Manual image tags Inconsistent deployments Use $SHORT_SHA or semantic versions
Not using profiles Same config across environments Define per-stage profiles

Quick Reference

Command Description
gcloud deploy apply --file=F Register pipeline/targets
gcloud deploy releases create R --images=IMG Create release
gcloud deploy releases promote --release=R Promote to next stage
gcloud deploy rollouts approve R Approve a rollout
gcloud deploy targets rollback T Rollback a target

Next → Deployment Strategies

Updated: