Category
Application development
1. Introduction
Cloud Deploy is Google Cloud’s managed continuous delivery service for promoting application releases through a defined sequence of environments (for example: dev → staging → prod) with consistent, auditable rollout behavior.
In simple terms: you build an artifact once (container image + deployment config), then Cloud Deploy helps you deploy that same release to multiple targets in order, with optional approvals, visibility, and traceability.
Technically, Cloud Deploy provides a regional control plane that orchestrates releases and rollouts using a delivery pipeline definition. It integrates tightly with Skaffold (for rendering/deploying manifests), commonly with Cloud Build (as the execution environment), and it can deploy to supported runtimes such as Google Kubernetes Engine (GKE) and Cloud Run (verify current supported targets in official docs).
The problem it solves: teams often have “ad-hoc” deployment scripts per environment, inconsistent promotion processes, weak audit trails, and fragile rollback procedures. Cloud Deploy standardizes the promotion workflow, reduces “works in staging but not in prod” drift, and gives operators a single place to track who deployed what, where, and when.
2. What is Cloud Deploy?
Official purpose: Cloud Deploy is a managed service on Google Cloud for automating and governing the delivery (not the build) of application releases across multiple environments/targets, using a defined pipeline and deployment strategies.
Core capabilities
- Define a delivery pipeline with ordered stages (environments).
- Register targets that represent deployment destinations (for example, a GKE cluster or a Cloud Run region/service).
- Create immutable releases and execute rollouts to targets.
- Support promotions between targets with optional manual approvals.
- Track deployment history and state for audit and operations.
- Integrate with IAM, Cloud Audit Logs, Cloud Logging, and common CI systems.
Major components (conceptual model)
- Delivery pipeline: The blueprint of how a release moves through environments (stages).
- Target: A deployment destination (for example, “dev cluster”, “prod Cloud Run”).
- Release: A versioned snapshot of what you intend to deploy (config + references to images).
- Rollout: The act of deploying a specific release to a specific target.
- Promotion: Advancing a release from one stage/target to the next.
- Execution service account: The identity used to perform render/deploy operations against the target.
Service type and scope
- Service type: Managed continuous delivery / deployment orchestration (control plane) integrated with Google Cloud runtimes.
- Scope: Project-scoped resources (delivery pipelines, targets, releases, rollouts live in a Google Cloud project).
- Location model: Cloud Deploy resources are regional (you choose a region when creating/applying pipeline and target configs). The targets themselves may point to runtimes in specific regions/zones (for example, a GKE cluster location or a Cloud Run region).
Verify exact location constraints (for example, whether a pipeline in region A can target resources in region B) in the official docs, as this can evolve.
How it fits into the Google Cloud ecosystem
Cloud Deploy sits between: – CI (build/test) systems such as Cloud Build, GitHub Actions, GitLab CI, Jenkins – and runtime platforms such as GKE and Cloud Run
Typical ecosystem integrations: – Artifact Registry: store container images referenced by releases – Cloud Build: run Skaffold rendering and deployment steps (commonly) – Cloud Logging / Cloud Monitoring: operational visibility – Cloud Audit Logs: compliance and traceability – IAM: enforce who can create releases, promote, approve, and operate pipelines
Official docs entry point: https://cloud.google.com/deploy/docs
3. Why use Cloud Deploy?
Business reasons
- Faster, safer releases: standardized promotions reduce deployment errors.
- Auditability: better traceability for change management and compliance.
- Consistency across teams: platform teams can offer a paved road for delivery.
Technical reasons
- Separation of concerns: CI builds artifacts; Cloud Deploy promotes and deploys them.
- Environment parity: the same release is promoted across targets rather than rebuilt per environment.
- Declarative pipeline definitions: delivery workflow can be versioned alongside code.
Operational reasons
- Single pane of glass for deployments: rollouts, failures, approvals, and history.
- Repeatable rollbacks: redeploy a previous known-good release (process varies by strategy; verify for your target type).
- Controlled promotions: gating and approvals reduce risky deployments.
Security and compliance reasons
- Least privilege: use distinct service accounts per environment/target.
- Manual approval gates: enforce separation of duties (for example, dev can deploy to dev, SRE approves prod).
- Audit logs: deployment actions captured by Google Cloud audit mechanisms.
Scalability/performance reasons
- Cloud Deploy offloads the orchestration control plane to Google Cloud; you focus on runtime scaling in GKE/Cloud Run.
- Scales operationally: many services/teams can follow consistent patterns without bespoke scripting.
When teams should choose Cloud Deploy
- You deploy to GKE and/or Cloud Run and want a managed CD layer.
- You need multi-environment promotion, approvals, and an audit trail.
- You want standardized deployment practices across teams and services.
- You want to reduce custom scripts and “tribal knowledge” in deployment pipelines.
When teams should not choose it
- You need a CD system for non-supported targets (for example, on-prem systems with no supported integration).
- You rely heavily on GitOps pull-based reconciliation (you may prefer Argo CD or Flux).
- You need highly customized workflow orchestration beyond what Cloud Deploy’s pipeline model supports (you might use Tekton, Jenkins, or a workflow engine).
- Your organization already has a mature enterprise CD platform and Cloud Deploy would duplicate it.
4. Where is Cloud Deploy used?
Industries
- SaaS and B2B software
- Financial services (change control, audit requirements)
- Retail/e-commerce (frequent releases, seasonal scaling)
- Media and streaming (high deployment cadence)
- Healthcare and public sector (strong governance needs)
Team types
- DevOps / platform engineering teams building a standardized delivery platform
- SRE teams enforcing safer production changes
- Product engineering teams deploying microservices frequently
- Security teams implementing approval and audit requirements
Workloads
- Containerized web APIs and microservices
- Event-driven services (Cloud Run)
- Kubernetes workloads (GKE)
- Internal developer platforms standardizing delivery templates
Architectures
- Microservices with multiple environments
- Multi-tenant services requiring careful promotion workflows
- Hub-and-spoke orgs where central platform team defines pipeline patterns, app teams deliver releases
Real-world deployment contexts
- Regulated production environments with mandatory approvals
- High-velocity startups needing reliable promotion without building a platform from scratch
- Enterprises migrating from script-based deployment to managed continuous delivery
Production vs dev/test usage
- Dev/test: fast iteration, fewer approvals, frequent rollouts
- Production: strict approvals, controlled rollout strategies, robust monitoring, and incident-driven rollback procedures
5. Top Use Cases and Scenarios
Below are realistic scenarios where Cloud Deploy is a strong fit.
1) Standard dev → staging → prod promotions for Cloud Run
- Problem: Teams deploy directly from CI to production; inconsistent steps and weak audit trails.
- Why Cloud Deploy fits: Defines a repeatable promotion path with approvals.
- Example: A Cloud Run API is deployed to
dev, smoke-tested, promoted tostaging, then approved forprod.
2) Multi-cluster GKE deployments with environment-specific settings
- Problem: Different clusters require different manifests/overlays; manual edits cause drift.
- Why it fits: Use Skaffold profiles/overlays per stage/target while keeping a single release.
- Example: Same microservice promoted across three GKE clusters with different resource limits.
3) Controlled production access with separation of duties
- Problem: Developers shouldn’t directly deploy to production.
- Why it fits: Approvals + IAM allow devs to create releases while ops approves prod rollouts.
- Example: Dev team can deploy to dev; SRE must approve promotion to prod.
4) Audit-ready deployment history for compliance
- Problem: Need evidence of what changed and who approved it.
- Why it fits: Central deployment record + Cloud Audit Logs.
- Example: Quarterly audits require proof of approvals and deployment timestamps.
5) Release coordination for multiple services (portfolio delivery)
- Problem: Many microservices deploy differently; on-call can’t quickly assess what changed.
- Why it fits: Standard rollout model and consistent release metadata across services.
- Example: Platform team enforces one delivery template; app teams plug in their manifests.
6) Progressive delivery patterns (where supported)
- Problem: Big-bang deployments increase risk.
- Why it fits: Cloud Deploy supports deployment strategies depending on target type (verify exact supported strategies per target).
- Example: Roll out gradually in staging; after success, promote to prod.
7) Centralized “golden path” for application development teams
- Problem: Each team reinvents delivery pipelines.
- Why it fits: Reusable pipeline patterns + standardized IAM/approvals.
- Example: Internal developer platform provides a template repo with Cloud Deploy config.
8) Hybrid CI systems with Google Cloud runtime deployments
- Problem: Builds happen in GitHub Actions, but deployments must be governed centrally in Google Cloud.
- Why it fits: Cloud Deploy can be triggered from external CI via
gcloud/API. - Example: GitHub Actions builds/pushes an image; then calls Cloud Deploy to create a release.
9) Minimizing configuration drift across environments
- Problem: Environment manifests drift due to manual edits.
- Why it fits: Use render-time templating and controlled promotion.
- Example: Kustomize/Helm overlays applied predictably per stage through Skaffold.
10) Rollback to a known-good release during incidents
- Problem: Emergency rollback is manual and error-prone.
- Why it fits: You can redeploy a previous release or promote an older known-good release (exact mechanics depend on workflow; verify).
- Example: After a failed rollout, operators redeploy last stable release to prod.
11) Multi-region runtime targets (governed promotion)
- Problem: Need consistent deployment across regions.
- Why it fits: Multiple targets can represent different regions; promotions can be controlled.
- Example: Promote from
prod-ustoprod-euafter validating US metrics.
12) Pre-production validation gates integrated with deployment flow
- Problem: Tests run inconsistently and aren’t tied to promotions.
- Why it fits: Cloud Deploy supports integration points (often via Cloud Build/Skaffold workflows; verify current features like custom actions/hook steps).
- Example: A smoke test job must pass before promotion to prod.
6. Core Features
Note: Feature availability can vary by target type (GKE vs Cloud Run) and by release channel. Verify the latest in official docs: https://cloud.google.com/deploy/docs
1) Delivery pipelines (multi-stage promotion)
- What it does: Defines ordered stages for how releases move through environments.
- Why it matters: Standardizes deployment flow and reduces “pipeline sprawl”.
- Practical benefit: Consistent dev→prod promotions across services.
- Caveats: Pipelines are regional resources; plan your region strategy.
2) Targets (environment destinations)
- What it does: Encapsulates where/how to deploy (for example, a GKE cluster or a Cloud Run location).
- Why it matters: Decouples pipeline structure from the underlying runtime details.
- Practical benefit: Swap or add targets without redesigning the whole process.
- Caveats: Each target needs correct IAM permissions and an execution identity.
3) Releases (versioned delivery units)
- What it does: Captures a deployable snapshot: config + references to container images.
- Why it matters: Promotes the same release across environments for consistency.
- Practical benefit: Reproducible deployments and clearer audit trail.
- Caveats: Cloud Deploy is not primarily a build service; build images in CI and reference them in the release.
4) Rollouts (deployment execution per target)
- What it does: Executes deployment steps to a specific target for a given release.
- Why it matters: Provides per-environment status and history.
- Practical benefit: Faster troubleshooting (know exactly where it failed).
- Caveats: Failures are often due to underlying runtime/IAM/network issues; monitor Cloud Build logs if used.
5) Approvals and gated promotions
- What it does: Requires human approval before continuing to certain stages (commonly production).
- Why it matters: Enforces change control and separation of duties.
- Practical benefit: Prevents accidental production deployments.
- Caveats: Approval configuration must align with IAM; otherwise, teams can get blocked.
6) Skaffold-based rendering and deployment
- What it does: Uses Skaffold configuration to render Kubernetes/Cloud Run manifests and deploy them.
- Why it matters: Leverages a widely used, declarative deployment toolchain.
- Practical benefit: Reuse local dev and CI config patterns in CD.
- Caveats: You must manage Skaffold config carefully; version mismatches can break deployments. Pin versions where possible and validate in CI.
7) Environment-specific configuration via profiles/overlays
- What it does: Applies different profiles per stage (for example, dev vs prod settings).
- Why it matters: Keeps a single source of truth while allowing necessary differences.
- Practical benefit: Lower risk than maintaining separate manifests per environment.
- Caveats: Overlays can become complex; document conventions and enforce code review.
8) IAM-integrated access control
- What it does: Uses Google Cloud IAM roles to control who can administer pipelines, create releases, promote, and approve.
- Why it matters: Production safety and compliance.
- Practical benefit: Least-privilege delivery operations.
- Caveats: Misconfigured roles are a top source of onboarding friction.
9) Auditability and traceability
- What it does: Records actions and events; integrates with Cloud Audit Logs and logging.
- Why it matters: Supports compliance and incident response.
- Practical benefit: You can answer “who deployed what and when?” quickly.
- Caveats: Retention and export policies are your responsibility.
10) Integration with Google Cloud operations tooling
- What it does: Works alongside Cloud Logging/Monitoring and runtime-level telemetry.
- Why it matters: Deployments and operations are linked in production workflows.
- Practical benefit: Faster mean time to recovery (MTTR).
- Caveats: You still need runtime SLOs, alerts, and dashboards (Cloud Deploy doesn’t replace them).
7. Architecture and How It Works
High-level architecture
Cloud Deploy acts as a control plane: 1. You define a delivery pipeline and targets. 2. CI builds artifacts (usually container images) and pushes to Artifact Registry. 3. You create a Cloud Deploy release referencing those artifacts and your deployment config (often Skaffold + manifests). 4. Cloud Deploy creates rollouts to targets in the defined order. 5. For each rollout, Cloud Deploy runs rendering and deployment steps (commonly executed via Cloud Build) using an execution service account. 6. Approvals may be required before moving to later stages (for example, prod).
Control flow vs data flow
- Control flow: Cloud Deploy API operations create releases, rollouts, and promotions.
- Data flow: Container images move from build system → Artifact Registry → runtime pulls image. Manifests/config are rendered and applied to runtime.
Integrations with related services
Common integrations: – Artifact Registry: image storage – Cloud Build: execution of render/deploy steps (common pattern) – GKE: Kubernetes deployment target – Cloud Run: serverless container deployment target – Cloud Logging / Monitoring: logs and metrics – Cloud Audit Logs: governance and compliance
Dependency services
At minimum you usually rely on:
– A container registry (Artifact Registry recommended)
– A runtime (GKE or Cloud Run)
– An execution engine (often Cloud Build)
Some organizations run rendering/deployment in other controlled environments; verify current supported execution modes.
Security/authentication model
- End users and CI systems call the Cloud Deploy API using IAM identities (users, groups, service accounts).
- Cloud Deploy uses a configured execution service account to perform actions against targets (for example, deploy to Cloud Run or apply Kubernetes manifests).
- You should use separate execution service accounts per environment for least privilege.
Networking model (practical view)
- Cloud Deploy control plane is accessed via Google APIs.
- Deployment execution frequently happens via Cloud Build workers calling Google APIs (Cloud Run) or Kubernetes control planes (GKE).
- For restricted networks (private clusters, VPC-SC, limited egress), plan connectivity carefully and verify the recommended pattern for your target type (for example, private pools, authorized networks, or other supported approaches).
Monitoring/logging/governance considerations
- Track rollout status in Cloud Deploy and correlate with:
- Cloud Build logs (if used for execution)
- Runtime logs (Cloud Run logs / GKE workload logs)
- Metrics (latency, error rate, saturation)
- Export Cloud Deploy-related logs to a SIEM if needed via Logging sinks.
- Tag and name resources consistently for cost allocation and auditing.
Simple architecture diagram (Mermaid)
flowchart LR
Dev[Developer / CI] -->|Create release| CD[Cloud Deploy (regional control plane)]
CI[CI Build] -->|Build image| CB[Cloud Build]
CB -->|Push image| AR[Artifact Registry]
CD -->|Render & Deploy (often via Cloud Build)| Exec[Execution Jobs]
Exec -->|Deploy| CR[Cloud Run Target]
Exec -->|Deploy| GKE[GKE Target]
AR -->|Image pull| CR
AR -->|Image pull| GKE
Production-style architecture diagram (Mermaid)
flowchart TB
subgraph Source[Source Control]
Repo[Git Repo: app + skaffold + clouddeploy config]
end
subgraph CI[CI Pipeline]
Tests[Unit/Integration Tests]
Build[Build Container Image]
Sign[Optional: Sign/Attest Image]
end
subgraph Registry[Artifact Management]
AR[Artifact Registry]
end
subgraph CD[Continuous Delivery]
CDctl[Cloud Deploy API]
Pipe[Delivery Pipeline: dev->staging->prod]
Approve[Manual Approval Gate (prod)]
end
subgraph Exec[Execution Layer]
CB[Cloud Build Execution (render/deploy)]
SA[Execution Service Accounts per env]
end
subgraph Runtime[Runtime Targets]
DevEnv[Dev Target (Cloud Run or GKE)]
StgEnv[Staging Target]
ProdEnv[Prod Target]
end
subgraph Ops[Operations & Governance]
Logs[Cloud Logging]
Audit[Cloud Audit Logs]
Mon[Cloud Monitoring]
Alert[Alerting/SLOs]
end
Repo --> Tests --> Build --> AR
Build --> CDctl
Repo --> CDctl
CDctl --> Pipe --> CB
SA --> CB
CB --> DevEnv --> Mon
CB --> StgEnv --> Mon
Approve --> CB
CB --> ProdEnv --> Mon
CDctl --> Logs
CDctl --> Audit
Mon --> Alert
8. Prerequisites
Project/account requirements
- A Google Cloud project with billing enabled
- Permission to enable APIs and create IAM service accounts
Required APIs (typical)
Enable (at least): – Cloud Deploy API – Cloud Build API – Artifact Registry API – Cloud Run Admin API (if using Cloud Run targets) – Kubernetes Engine API (if using GKE targets)
You can enable these in the console or with gcloud services enable.
Permissions / IAM roles (typical minimums)
You’ll likely need some combination of: – Cloud Deploy roles (admin/operator/releaser/approver/job runner depending on your workflow) – Artifact Registry permissions (to push/pull images) – Cloud Build permissions (to run builds) – Cloud Run Admin permissions (to deploy services) or GKE permissions (to apply manifests)
Because IAM can be nuanced, use least privilege and verify current predefined roles in: https://cloud.google.com/deploy/docs/access-control
Tools
- Google Cloud CLI (
gcloud): https://cloud.google.com/sdk/docs/install - Docker (for local testing; optional if you build only with Cloud Build)
- Skaffold (optional locally; Cloud Deploy commonly runs Skaffold in Cloud Build, but having it locally helps validate configs): https://skaffold.dev/
Region availability
- Cloud Deploy is regional. Choose a region supported by Cloud Deploy and close to your runtime targets to reduce latency.
- Verify Cloud Deploy regional availability in official docs.
Quotas/limits
- Cloud Deploy and Cloud Build have quotas (API requests, concurrent builds, etc.).
- Verify quotas in the Google Cloud console: IAM & Admin → Quotas and product-specific quota pages.
Prerequisite services/resources (for the lab)
For the hands-on tutorial below (Cloud Run-based, low ops overhead): – Artifact Registry Docker repository – Cloud Run enabled in your chosen region – A service account for Cloud Deploy execution with Cloud Run deploy permissions
9. Pricing / Cost
Cloud Deploy pricing can change over time and may vary by region and SKU. Use the official sources: – Official pricing page: https://cloud.google.com/deploy/pricing – Google Cloud Pricing Calculator: https://cloud.google.com/products/calculator
Pricing dimensions (what you typically pay for)
From a cost-planning perspective, separate: 1. Cloud Deploy control plane charges (if any for your usage tier/SKUs) 2. Execution charges (commonly Cloud Build time used for render/deploy) 3. Runtime charges (Cloud Run requests/CPU/memory, or GKE cluster + nodes) 4. Artifact and storage charges (Artifact Registry storage, egress) 5. Network charges (egress between services/regions, internet egress)
Because the exact Cloud Deploy SKUs can evolve, verify the current billable units (for example, per active pipeline, per release/rollout, or other dimensions) on the official pricing page.
Free tier (if applicable)
Google Cloud services sometimes include free tiers or monthly free usage. If Cloud Deploy provides free usage, it will be stated on the official pricing page. Verify in official pricing.
Primary cost drivers (real-world)
Even when Cloud Deploy’s own cost is modest, the overall delivery cost is usually driven by: – Cloud Build minutes for render/deploy steps (and build minutes if you also build in Cloud Build) – GKE cluster costs (control plane and nodes) if using GKE – Artifact Registry storage and image pulls – Cloud Run usage (requests, CPU/memory, min instances if configured)
Hidden/indirect costs
- Multi-environment duplication: dev/staging/prod runtimes multiply baseline costs.
- Log volume: Cloud Build + runtime logs can grow quickly if not retained/filtered thoughtfully.
- Cross-region egress: storing images in one region but deploying in another can create egress and latency.
Cost optimization tips
- Prefer Cloud Run for lower-cost labs and smaller services (no cluster management).
- Keep Artifact Registry repositories in the same region as your build and runtime when possible.
- Use build caching and minimize redeploy frequency for unchanged artifacts.
- Use separate projects or folders for dev/test if that aligns with your governance model; it can also help cost allocation.
- Set log retention and export policies consciously.
Example low-cost starter estimate (conceptual)
A small team running a dev→prod pipeline on Cloud Run typically pays for: – Cloud Build execution during deployments (short builds) – Artifact Registry storage (small images) – Cloud Run usage (often within low traffic limits)
Exact numbers depend on usage patterns and region—use the pricing calculator and keep an eye on Cloud Build minutes and Cloud Run configuration (especially min instances).
Example production cost considerations
In production, plan for: – Higher deployment frequency (more execution jobs) – More environments and targets – Larger images, more pull volume – Stronger observability (more logs/metrics) – Potential premium networking patterns (private connectivity, restricted egress)
10. Step-by-Step Hands-On Tutorial
This lab uses Cloud Deploy + Cloud Run to create a simple dev→prod delivery pipeline with a manual approval gate for production. It is designed to be realistic, beginner-friendly, and relatively low-cost (compared to spinning up multiple GKE clusters).
If Cloud Deploy support for Cloud Run changes or requires additional configuration in your organization, verify the latest Cloud Run targeting docs in Cloud Deploy documentation.
Objective
Deploy a containerized “hello” service to Cloud Run dev, then promote the same release to Cloud Run prod with an approval step, using Cloud Deploy.
Lab Overview
You will: 1. Set up a project, region, Artifact Registry, and a Cloud Deploy execution service account. 2. Build and push a container image to Artifact Registry. 3. Create Cloud Deploy targets for dev and prod (Cloud Run). 4. Create a Cloud Deploy delivery pipeline. 5. Create a release and watch the rollout to dev. 6. Promote to prod, approve, and verify the prod rollout. 7. Clean up all resources.
Step 1: Set variables and verify tooling
Open a terminal with gcloud installed and authenticated.
gcloud --version
gcloud auth list
gcloud config list
Set environment variables:
export PROJECT_ID="YOUR_PROJECT_ID"
export REGION="us-central1" # choose a supported Cloud Deploy region
export REPO="cdemo"
export IMAGE="hello-cd"
export PIPELINE="hello-pipeline"
export DEV_TARGET="run-dev"
export PROD_TARGET="run-prod"
Set the project:
gcloud config set project "${PROJECT_ID}"
Expected outcome: gcloud config list shows your project as ${PROJECT_ID}.
Step 2: Enable required APIs
Enable APIs (this can take a minute):
gcloud services enable \
clouddeploy.googleapis.com \
cloudbuild.googleapis.com \
artifactregistry.googleapis.com \
run.googleapis.com
Expected outcome: APIs enable successfully with no errors.
If you see permission errors, you likely need Project Owner/Editor or specific Service Usage permissions.
Step 3: Create an Artifact Registry Docker repository
Create a regional Docker repository:
gcloud artifacts repositories create "${REPO}" \
--repository-format=docker \
--location="${REGION}" \
--description="Cloud Deploy lab repo"
Configure Docker authentication (Artifact Registry):
gcloud auth configure-docker "${REGION}-docker.pkg.dev"
Expected outcome: Repository exists, and Docker auth is configured.
List repositories:
gcloud artifacts repositories list --location="${REGION}"
Step 4: Create a Cloud Deploy execution service account (least privilege)
Create a service account that Cloud Deploy will use to render/deploy.
export EXEC_SA="clouddeploy-exec"
gcloud iam service-accounts create "${EXEC_SA}" \
--display-name="Cloud Deploy execution SA"
Store the email:
export EXEC_SA_EMAIL="${EXEC_SA}@${PROJECT_ID}.iam.gserviceaccount.com"
echo "${EXEC_SA_EMAIL}"
Grant required roles.
For a Cloud Run target, the execution identity typically needs:
– Permission to deploy to Cloud Run (for example, roles/run.admin)
– Permission to act as a runtime service account if your Cloud Run service uses one (roles/iam.serviceAccountUser)
– Read access to pull from Artifact Registry (roles/artifactregistry.reader)
Apply roles at the project level for the lab (in production, scope them tighter):
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
--member="serviceAccount:${EXEC_SA_EMAIL}" \
--role="roles/run.admin"
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
--member="serviceAccount:${EXEC_SA_EMAIL}" \
--role="roles/artifactregistry.reader"
If you plan to specify a dedicated Cloud Run runtime service account, also grant:
gcloud projects add-iam-policy-binding "${PROJECT_ID}" \
--member="serviceAccount:${EXEC_SA_EMAIL}" \
--role="roles/iam.serviceAccountUser"
Expected outcome: IAM bindings are added.
Principle: In production, prefer environment-specific execution SAs (dev/prod) and restrict roles to only what that target needs.
Step 5: Create a minimal app + container image
Create a working directory:
mkdir -p clouddeploy-cloudrun-lab && cd clouddeploy-cloudrun-lab
Create a simple HTTP app (Python/Flask example).
app.py:
import os
from flask import Flask
app = Flask(__name__)
@app.get("/")
def hello():
env = os.environ.get("ENV_NAME", "unknown")
return f"Hello from Cloud Run via Cloud Deploy! env={env}\n"
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", "8080")))
requirements.txt:
flask==3.0.3
gunicorn==22.0.0
Dockerfile:
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY app.py .
ENV PORT=8080
CMD ["gunicorn", "-b", ":8080", "app:app"]
Build with Cloud Build and push to Artifact Registry:
export IMAGE_URI="${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}/${IMAGE}:v1"
gcloud builds submit --tag "${IMAGE_URI}" .
Expected outcome: Build succeeds and the image exists in Artifact Registry.
Verify:
gcloud artifacts docker images list "${REGION}-docker.pkg.dev/${PROJECT_ID}/${REPO}"
Step 6: Create the Cloud Run service manifest and Skaffold config
Cloud Deploy commonly uses Skaffold to render and deploy manifests.
Create service.yaml (Knative serving manifest for Cloud Run):
cat > service.yaml <<'EOF'
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: hello-cd
spec:
template:
metadata:
annotations:
autoscaling.knative.dev/maxScale: "5"
spec:
containers:
- image: hello-image
env:
- name: ENV_NAME
value: "replace-me"
ports:
- containerPort: 8080
EOF
Create skaffold.yaml with profiles for dev/prod:
cat > skaffold.yaml <<'EOF'
apiVersion: skaffold/v4beta6
kind: Config
metadata:
name: hello-cd
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun: {}
profiles:
- name: dev
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun:
region: us-central1
patches:
- op: replace
path: /spec/template/spec/containers/0/env/0/value
value: "dev"
- name: prod
manifests:
rawYaml:
- service.yaml
deploy:
cloudrun:
region: us-central1
patches:
- op: replace
path: /spec/template/spec/containers/0/env/0/value
value: "prod"
EOF
Update the region inside profiles if you chose a different ${REGION} (keep dev/prod consistent for this lab).
Expected outcome: You have a basic service.yaml and skaffold.yaml ready for Cloud Deploy to use.
Verification: ls -la shows service.yaml and skaffold.yaml.
Note: Skaffold API versions and schema can change. If Skaffold validation fails, verify the current Skaffold version/schema in official docs.
Step 7: Define Cloud Deploy targets and delivery pipeline
Create clouddeploy.yaml defining:
– Two Cloud Run targets: dev and prod
– One delivery pipeline with two stages and a manual approval gate for prod
cat > clouddeploy.yaml <<EOF
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: ${DEV_TARGET}
description: Cloud Run dev target
run:
location: projects/${PROJECT_ID}/locations/${REGION}
executionConfigs:
- usages: ["RENDER", "DEPLOY"]
serviceAccount: ${EXEC_SA_EMAIL}
---
apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
name: ${PROD_TARGET}
description: Cloud Run prod target
run:
location: projects/${PROJECT_ID}/locations/${REGION}
executionConfigs:
- usages: ["RENDER", "DEPLOY"]
serviceAccount: ${EXEC_SA_EMAIL}
---
apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
name: ${PIPELINE}
description: Hello Cloud Deploy pipeline (dev -> prod)
serialPipeline:
stages:
- targetId: ${DEV_TARGET}
profiles: ["dev"]
- targetId: ${PROD_TARGET}
profiles: ["prod"]
requiresApproval: true
EOF
Apply it:
gcloud deploy apply \
--file=clouddeploy.yaml \
--region="${REGION}"
Expected outcome: Targets and delivery pipeline are created in Cloud Deploy.
Verify:
gcloud deploy delivery-pipelines list --region="${REGION}"
gcloud deploy targets list --region="${REGION}"
Step 8: Create a Cloud Deploy release
Create a release that references your local config, and specify which image to deploy.
A common pattern is to create a release with --source=. and pass image mapping using --images.
export RELEASE="rel-001"
gcloud deploy releases create "${RELEASE}" \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}" \
--source="." \
--images="hello-image=${IMAGE_URI}"
Expected outcome: Cloud Deploy creates the release and starts a rollout to the first target (dev) automatically.
Check release and rollouts:
gcloud deploy releases describe "${RELEASE}" \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}"
gcloud deploy rollouts list \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}"
Step 9: Watch the dev rollout and verify in Cloud Run
Get rollout details (identify the dev rollout name from the list):
export DEV_ROLLOUT="$(gcloud deploy rollouts list \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}" \
--format='value(name)' | head -n 1)"
echo "${DEV_ROLLOUT}"
Describe it:
gcloud deploy rollouts describe "${DEV_ROLLOUT}" \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}"
If the rollout uses Cloud Build for execution, check the Cloud Build logs URL in the rollout details (or view Cloud Build history in the console).
Verify the Cloud Run service exists and fetch its URL:
gcloud run services describe hello-cd \
--region="${REGION}" \
--format="value(status.url)"
Call the service:
curl -s "$(gcloud run services describe hello-cd --region="${REGION}" --format='value(status.url)')"
Expected outcome: Output includes env=dev.
Step 10: Promote the release to prod and approve
Promote the same release to the prod target:
gcloud deploy releases promote "${RELEASE}" \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}" \
--to-target="${PROD_TARGET}"
Because prod requires approval, the prod rollout should be pending approval.
List rollouts again and identify the newest rollout (prod):
gcloud deploy rollouts list \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}" \
--sort-by="~createTime"
Set the prod rollout name (copy from output), for example:
export PROD_ROLLOUT="ROLL_OUT_NAME_FOR_PROD"
Describe:
gcloud deploy rollouts describe "${PROD_ROLLOUT}" \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}"
Approve the rollout:
gcloud deploy rollouts approve "${PROD_ROLLOUT}" \
--delivery-pipeline="${PIPELINE}" \
--region="${REGION}"
Wait a bit, then verify again by calling the Cloud Run service URL:
curl -s "$(gcloud run services describe hello-cd --region="${REGION}" --format='value(status.url)')"
Expected outcome: Output now includes env=prod (because the prod profile patch is applied).
Note: In this lab, dev and prod deploy to the same Cloud Run service name in the same region for simplicity. In a real setup, dev/prod would typically be separate services, separate projects, or separate regions to avoid overwriting. See best practices below.
Validation
Use this checklist:
- Cloud Deploy pipeline and targets exist:
gcloud deploy delivery-pipelines describe "${PIPELINE}" --region="${REGION}"
gcloud deploy targets describe "${DEV_TARGET}" --region="${REGION}"
gcloud deploy targets describe "${PROD_TARGET}" --region="${REGION}"
- Release exists and has rollouts:
gcloud deploy releases describe "${RELEASE}" --delivery-pipeline="${PIPELINE}" --region="${REGION}"
gcloud deploy rollouts list --delivery-pipeline="${PIPELINE}" --region="${REGION}"
- Cloud Run service responds:
curl -s "$(gcloud run services describe hello-cd --region="${REGION}" --format='value(status.url)')"
Troubleshooting
Issue: PERMISSION_DENIED during rollout
- Cause: Execution service account lacks Cloud Run or Artifact Registry permissions.
- Fix: Confirm the target’s
executionConfigs.serviceAccountis correct and has: roles/run.adminroles/artifactregistry.reader- Possibly
roles/iam.serviceAccountUserif acting as another SA
Check IAM policy bindings:
gcloud projects get-iam-policy "${PROJECT_ID}" \
--flatten="bindings[].members" \
--filter="bindings.members:serviceAccount:${EXEC_SA_EMAIL}" \
--format="table(bindings.role)"
Issue: Rollout stuck or failing with Cloud Build errors
- Cause: Cloud Build execution failed to render/deploy (Skaffold config error, wrong image mapping, etc.).
- Fix:
- Open the Cloud Build logs referenced by the rollout.
- Validate Skaffold config locally (if Skaffold installed):
skaffold render -p dev(verify your Skaffold version). - Ensure
--images="hello-image=${IMAGE_URI}"matches the placeholder image name inservice.yaml.
Issue: requiresApproval not working / schema error
- Cause: API schema or field name differs from what your organization/region expects.
- Fix: Verify the exact field names for approvals in the current Cloud Deploy YAML schema in official docs.
Issue: Cloud Run service not reachable
- Cause: Cloud Run ingress/auth settings.
- Fix:
- Check whether the service requires authentication.
- For a public lab service, ensure it allows unauthenticated access (policy decision).
If you must keep it private, call it with an identity token.
Cleanup
To avoid ongoing charges, delete resources.
1) Delete Cloud Run service:
gcloud run services delete hello-cd --region="${REGION}" --quiet
2) Delete Cloud Deploy pipeline and targets:
gcloud deploy delivery-pipelines delete "${PIPELINE}" --region="${REGION}" --quiet
gcloud deploy targets delete "${DEV_TARGET}" --region="${REGION}" --quiet
gcloud deploy targets delete "${PROD_TARGET}" --region="${REGION}" --quiet
3) Delete Artifact Registry repository (removes images):
gcloud artifacts repositories delete "${REPO}" --location="${REGION}" --quiet
4) Delete execution service account:
gcloud iam service-accounts delete "${EXEC_SA_EMAIL}" --quiet
Expected outcome: All created resources are removed.
11. Best Practices
Architecture best practices
- Separate environments cleanly:
- Prefer separate Cloud Run services (for example
hello-dev,hello-prod) or separate projects for stronger isolation. - For GKE, use separate clusters or namespaces with strict RBAC.
- Promote the same artifact:
- Build once, deploy many. Use immutable image tags (or digests) and promote the same release.
- Standardize configuration overlays:
- Use Skaffold profiles with Kustomize/Helm overlays for environment differences.
- Keep differences minimal and documented.
IAM/security best practices
- Use dedicated execution service accounts per environment:
cd-exec-dev@...with dev-only permissionscd-exec-prod@...with prod-only permissions- Use least privilege:
- Narrow roles to the minimum needed for that target.
- Avoid project-wide admin roles for production.
- Separate duties:
- Developers create releases; production approvers approve/promote.
- Protect release creation:
- Restrict who can create releases and promotions; otherwise you can bypass controls.
Cost best practices
- Keep build and deploy execution efficient:
- Minimize render complexity and unnecessary steps.
- Place Artifact Registry close to runtimes:
- Reduce egress and speed up pulls.
- Control logging volume:
- Set retention policies and export only needed logs.
Performance best practices
- For Cloud Run:
- Tune concurrency, CPU/memory, and min/max instances based on workload.
- For GKE:
- Use resource requests/limits and autoscaling (HPA/Cluster Autoscaler) and ensure rollout strategy aligns with pod disruption budgets.
Reliability best practices
- Define a rollback procedure:
- Know how to redeploy a previous release in Cloud Deploy.
- Practice rollback in staging.
- Use progressive delivery where appropriate (and supported):
- Canary/blue-green patterns reduce blast radius (verify supported strategies for your target type).
- Add health checks and readiness:
- Ensure deployments fail fast when unhealthy.
Operations best practices
- Integrate deployments with monitoring:
- Deployments should be correlated with metrics (error rate, latency).
- Automate post-deploy verification:
- Run smoke tests and checks after dev/staging deployments before promoting to prod (implementation depends on your toolchain).
- Standardize naming and labels:
- Pipeline/target naming conventions (
service-env-region) help governance and search.
Governance/tagging/naming best practices
- Use consistent resource names:
pipeline: payments-apitargets: payments-dev-uscentral1,payments-prod-uscentral1- Tag cost centers via labels where available; enforce via policy-as-code if your org supports it.
- Maintain a versioned repository for:
clouddeploy.yamlskaffold.yaml- manifests/overlays
12. Security Considerations
Identity and access model
- Cloud Deploy uses IAM for:
- Administering pipelines/targets
- Creating releases
- Promoting releases
- Approving rollouts
- Deployment execution uses a specified execution service account to interact with targets.
- Recommended approach:
- Human users: minimal rights (create releases, view status)
- Automation (CI): releaser role scoped to needed pipelines
- Prod approvals: restricted group role
Encryption
- Data at rest and in transit is handled via Google Cloud’s standard encryption mechanisms for managed services.
- For sensitive artifacts (manifests with config), avoid embedding secrets; use secrets managers.
Network exposure
- Cloud Run:
- Decide on ingress (public vs internal) and authentication.
- GKE:
- Consider private clusters and authorized networks.
- Execution environment:
- If using Cloud Build, understand worker egress paths and whether private pools are required for restricted networks (verify your requirements).
Secrets handling
- Do not store secrets in:
- Git repos
- plain manifests
- Cloud Deploy configuration
- Use Secret Manager or runtime-native secret integrations (Cloud Run supports Secret Manager integration; Kubernetes supports Secrets, ideally backed by external secret managers).
Audit/logging
- Ensure Cloud Deploy and related services produce audit logs and that you retain them according to policy.
- Export logs to a centralized logging project or SIEM if required.
Compliance considerations
- Approvals and separation of duties help with:
- SOC 2 change management controls
- ISO-aligned deployment traceability requirements
- For regulated workloads, also consider:
- Policy constraints (Org Policy)
- Image provenance and vulnerability scanning (Artifact Analysis)
- Attestation/signing workflows (verify current recommended Google Cloud approach)
Common security mistakes
- Using one execution service account with broad permissions across all environments
- Allowing developers to self-approve production rollouts
- Deploying from mutable tags like
:latest - Embedding secrets in manifests or pipeline config
- Not restricting who can create targets (targets can point to production destinations)
Secure deployment recommendations
- Use image digests or immutable version tags.
- Add production approval gates.
- Use separate projects for prod when possible.
- Keep a strict review process on
clouddeploy.yamlandskaffold.yaml. - Consider organization policies to restrict where deployments can go.
13. Limitations and Gotchas
Always confirm current limits and supported runtimes in official docs.
Known limitations / common gotchas
- Regional resource model: Pipelines/targets are regional; plan for multi-region deployments deliberately.
- Target support: Cloud Deploy supports specific target types (commonly GKE and Cloud Run). Non-standard targets require alternative tooling.
- Private networking complexity: Deploying to private GKE clusters may require additional networking setup (authorized networks, connectivity patterns). Verify recommended approaches.
- IAM friction: Most rollout failures in new setups are missing permissions for the execution service account.
- Skaffold version/schema: Mismatched Skaffold config versions can break deployments. Pin versions and validate in CI.
- Same-service dev/prod: If dev/prod targets deploy to the same Cloud Run service name, promotions overwrite the same service (fine for a lab, not for isolation).
- Artifact locality: Cross-region image pulls can cause latency and egress charges.
- Quota constraints: Cloud Build concurrency limits can become a bottleneck for many simultaneous rollouts.
Pricing surprises
- Cloud Deploy might be inexpensive, but:
- Cloud Build execution time can grow with complex rendering or additional verification steps.
- GKE environments multiply baseline costs.
- Logs can become a meaningful cost center.
Migration challenges
- Converting from script-based pipelines requires:
- Standardizing manifests and overlays
- Defining clear environment boundaries
- Aligning release versioning and promotion policies
Vendor-specific nuances
- Cloud Deploy is tightly integrated with Google Cloud IAM and Google Cloud runtimes. Portability requires abstraction (for example, keeping Skaffold and manifests cloud-agnostic where possible).
14. Comparison with Alternatives
Cloud Deploy is one option in the continuous delivery space. The “best” choice depends on your runtimes, governance needs, and whether you prefer push-based CD (Cloud Deploy) or pull-based GitOps (Argo CD/Flux).
Comparison table
| Option | Best For | Strengths | Weaknesses | When to Choose |
|---|---|---|---|---|
| Cloud Deploy (Google Cloud) | Managed CD to GKE/Cloud Run with approvals and auditability | Google Cloud-native IAM/audit, pipeline/target model, consistent promotions | Target scope limited to supported integrations; regional resource model; learning curve with Skaffold | You want a managed Google Cloud CD control plane for GKE/Cloud Run |
| Cloud Build (Google Cloud) + scripts | Simple deployments or custom workflows | Highly flexible, straightforward for small setups | DIY governance, ad-hoc promotions, harder audit trail | You have simple needs or must deploy to custom targets Cloud Deploy doesn’t support |
| GKE GitOps (Anthos Config Management / Config Sync) | Kubernetes GitOps pull-based reconciliation | Strong drift control, Kubernetes-native model | Kubernetes-focused, separate promotion mechanics | You want GitOps for GKE and pull-based reconciliation |
| Argo CD (self-managed) | Kubernetes GitOps, multi-cluster | Mature GitOps UI/workflows, strong ecosystem | Operate it yourself; needs platform maturity | You want GitOps and can run/secure Argo CD reliably |
| Flux CD (self-managed) | Lightweight GitOps | Simple, Kubernetes-native | Operate and secure it; fewer UI features by default | You want GitOps with minimal overhead |
| Spinnaker (self-managed) | Complex enterprise CD | Advanced deployment strategies | Operationally heavy; high complexity | You need very advanced rollout orchestration and can support its operations |
| AWS CodeDeploy/CodePipeline | AWS-native deployments | Strong AWS integrations | Not Google Cloud-native | Your primary runtime is AWS |
| Azure DevOps Pipelines/Releases | Azure-centric enterprises | Mature enterprise tooling | Not Google Cloud-native | You’re standardized on Azure DevOps across the org |
| GitHub Actions + environment protections | Teams already on GitHub | Simple workflows, approvals in GitHub | Governance split between GitHub and runtime; less centralized in Google Cloud | You want minimal tooling and accept CI-driven deployment governance |
15. Real-World Example
Enterprise example: regulated fintech deploying microservices to GKE
- Problem: A fintech runs 80+ microservices on GKE. Production changes require approvals, auditable history, and strict separation of duties. Deployments are inconsistent across teams due to custom scripts.
- Proposed architecture:
- Artifact Registry for images (scanned and signed/attested per policy)
- Cloud Build for CI builds/tests
- Cloud Deploy for dev→staging→prod promotions
- Separate execution service accounts for each environment and cluster
- Manual approval gates before production, with limited approver group
- Centralized logs (Cloud Logging sinks) and dashboards/alerts (Cloud Monitoring)
- Why Cloud Deploy was chosen:
- Google Cloud-native IAM and auditing
- Standardized pipeline model across teams
- Clear promotion and approval flow for compliance
- Expected outcomes:
- Reduced production incidents caused by inconsistent deployments
- Faster audits (clear evidence of approvals and deployment history)
- Improved operational visibility into rollouts across services
Startup/small-team example: SaaS API on Cloud Run with weekly releases
- Problem: A startup deploys directly from GitHub Actions to Cloud Run. Rollbacks are manual and there is no consistent dev/staging/prod promotion.
- Proposed architecture:
- GitHub Actions builds and pushes images to Artifact Registry
- Cloud Deploy manages promotions dev→prod with approvals for prod
- Cloud Run for runtime, with monitoring and alerting on error rate/latency
- Why Cloud Deploy was chosen:
- Lightweight operational overhead compared to running a CD platform
- Adds promotion discipline without heavy process
- Expected outcomes:
- Fewer “accidental prod deploys”
- Repeatable promotion and a clearer trail of changes
- Faster incident rollback by redeploying known-good releases
16. FAQ
1) Is Cloud Deploy a CI service?
No. Cloud Deploy is primarily continuous delivery (promotion and deployment orchestration). You typically build artifacts using CI tools like Cloud Build, then create Cloud Deploy releases referencing those artifacts.
2) What can Cloud Deploy deploy to?
Common targets include GKE and Cloud Run. Target support can evolve—verify current supported target types in the official documentation.
3) Do I need Skaffold to use Cloud Deploy?
In many setups, yes—Cloud Deploy often uses Skaffold to render and deploy manifests. Some workflows may vary; verify supported configurations in the docs.
4) What is the difference between a release and a rollout?
A release is the versioned bundle of what you want to deploy. A rollout is the execution of deploying that release to a specific target.
5) Does Cloud Deploy rebuild images per environment?
It should not. Best practice is build once and promote the same artifact. You pass image references (tags/digests) into the release.
6) How do approvals work?
Approvals can be required before rollouts proceed to certain stages (often production). Approvers need appropriate IAM permissions.
7) Can Cloud Deploy support blue/green or canary deployments?
Cloud Deploy supports deployment strategies depending on the target type and current features. Verify the supported strategies and configuration for your runtime in official docs.
8) How do I roll back?
A common pattern is to redeploy a previous known-good release (or promote an older release). The exact operational steps depend on your pipeline design and deployment strategy—verify the recommended rollback process for your target type.
9) Should dev/staging/prod be separate projects?
Often yes for strong isolation, IAM boundaries, and blast-radius control. Some teams use separate namespaces/clusters instead. Choose based on governance and operational needs.
10) Does Cloud Deploy integrate with Cloud Audit Logs?
Yes—deployment-related actions are generally auditable through Google Cloud’s audit logging. Confirm your log retention and export policies.
11) Can I trigger Cloud Deploy from GitHub Actions or Jenkins?
Yes. You can call the Cloud Deploy API or gcloud deploy ... from external CI systems using a service account with appropriate permissions.
12) What’s the main operational dependency that fails in practice?
IAM and execution permissions. If the execution service account cannot deploy to Cloud Run/GKE or read from Artifact Registry, rollouts fail.
13) How does Cloud Deploy relate to GitOps tools like Argo CD?
Cloud Deploy is a managed, push-based CD orchestration service integrated with Google Cloud. Argo CD is a pull-based GitOps reconciler typically running in Kubernetes. They solve overlapping but different problems.
14) Is Cloud Deploy suitable for monorepos?
Yes. You can define multiple pipelines or targets per service; the key is structuring your release and config paths cleanly.
15) How do I minimize cost for learning labs?
Use Cloud Run targets, keep images small, reduce deployment frequency, delete repos/services after use, and monitor Cloud Build minutes.
17. Top Online Resources to Learn Cloud Deploy
| Resource Type | Name | Why It Is Useful |
|---|---|---|
| Official documentation | Cloud Deploy docs — https://cloud.google.com/deploy/docs | Primary reference for concepts, APIs, targets, and configuration |
| Official pricing | Cloud Deploy pricing — https://cloud.google.com/deploy/pricing | Current pricing model and billable dimensions |
| Pricing calculator | Google Cloud Pricing Calculator — https://cloud.google.com/products/calculator | Estimate total cost including Cloud Build, Cloud Run/GKE, and storage |
| Getting started | Cloud Deploy tutorials/quickstarts (see docs hub) — https://cloud.google.com/deploy/docs | Step-by-step official workflows (keep aligned with latest features) |
| Access control | Cloud Deploy IAM — https://cloud.google.com/deploy/docs/access-control | Role design and least privilege guidance |
| CLI reference | gcloud deploy command reference — https://cloud.google.com/sdk/gcloud/reference/deploy |
Exact CLI syntax for apply, releases, rollouts, and approvals |
| CI integration | Cloud Build docs — https://cloud.google.com/build/docs | Understand execution, logs, private pools, and quotas |
| Artifact management | Artifact Registry docs — https://cloud.google.com/artifact-registry/docs | Image storage, auth, vulnerability scanning integrations |
| Runtime docs | Cloud Run docs — https://cloud.google.com/run/docs | Service manifests, IAM, ingress/auth, revisions, troubleshooting |
| Runtime docs | GKE docs — https://cloud.google.com/kubernetes-engine/docs | Cluster auth/networking, RBAC, rollout patterns |
| Samples (official/trusted) | GoogleCloudPlatform GitHub — https://github.com/GoogleCloudPlatform | Many Google Cloud samples live here; search for Cloud Deploy examples (verify repository relevance) |
| Community learning | Skaffold docs — https://skaffold.dev/docs/ | Understand Skaffold rendering/profiles used by Cloud Deploy workflows |
18. Training and Certification Providers
| Institute | Suitable Audience | Likely Learning Focus | Mode | Website URL |
|---|---|---|---|---|
| DevOpsSchool.com | DevOps engineers, SREs, platform teams | CI/CD, Kubernetes, Google Cloud DevOps practices (verify course specifics) | Check website | https://www.devopsschool.com |
| ScmGalaxy.com | Beginners to intermediate DevOps learners | SCM, CI/CD foundations, DevOps tooling (verify course specifics) | Check website | https://www.scmgalaxy.com |
| CLoudOpsNow.in | Cloud operations and DevOps practitioners | Cloud operations, automation, deployment practices (verify course specifics) | Check website | https://www.cloudopsnow.in |
| SreSchool.com | SREs and operations engineers | Reliability engineering, monitoring, incident response (verify course specifics) | Check website | https://www.sreschool.com |
| AiOpsSchool.com | Ops teams exploring AIOps | AIOps concepts, automation, observability (verify course specifics) | Check website | https://www.aiopsschool.com |
19. Top Trainers
| Platform/Site | Likely Specialization | Suitable Audience | Website URL |
|---|---|---|---|
| RajeshKumar.xyz | DevOps/cloud guidance (verify current offerings) | Beginners to advanced | https://www.rajeshkumar.xyz |
| devopstrainer.in | DevOps training resources (verify current offerings) | DevOps learners and teams | https://www.devopstrainer.in |
| devopsfreelancer.com | Freelance DevOps help/training (verify current offerings) | Teams needing practical assistance | https://www.devopsfreelancer.com |
| devopssupport.in | DevOps support and training (verify current offerings) | Ops/DevOps teams | https://www.devopssupport.in |
20. Top Consulting Companies
| Company | Likely Service Area | Where They May Help | Consulting Use Case Examples | Website URL |
|---|---|---|---|---|
| cotocus.com | Cloud/DevOps consulting (verify service catalog) | Delivery pipelines, Kubernetes/Cloud Run operations, automation | Cloud Deploy adoption plan, CI/CD standardization, IAM hardening | https://www.cotocus.com |
| DevOpsSchool.com | DevOps consulting and enablement (verify service catalog) | Platform engineering, CI/CD, team upskilling | Building multi-env delivery templates, rollout governance, training | https://www.devopsschool.com |
| DEVOPSCONSULTING.IN | DevOps consulting (verify service catalog) | CI/CD modernization, cloud migration support | Migrating script-based deployments to managed CD, operational runbooks | https://www.devopsconsulting.in |
21. Career and Learning Roadmap
What to learn before Cloud Deploy
- Google Cloud fundamentals:
- Projects, IAM, service accounts, APIs, billing
- Containers:
- Docker basics, image tagging, Artifact Registry
- Runtime basics:
- Cloud Run services, revisions, IAM
- and/or Kubernetes fundamentals for GKE
- CI fundamentals:
- Cloud Build triggers, build logs, artifact promotion concepts
- Git and environment management:
- branching, release tags, change review
What to learn after Cloud Deploy
- Progressive delivery and reliability:
- canary/blue-green patterns (where supported)
- SLOs, error budgets, rollback automation
- Supply chain security:
- vulnerability scanning, SBOM concepts, signing/attestation (verify Google Cloud’s current recommended services)
- Platform engineering:
- reusable pipeline templates, policy-as-code, developer portals
- Advanced networking/security:
- private connectivity patterns, restricted egress, organization policy controls
Job roles that use it
- DevOps Engineer
- Site Reliability Engineer (SRE)
- Platform Engineer / Internal Developer Platform (IDP) Engineer
- Cloud Engineer
- Release Engineer
- Security Engineer (change governance, approvals, audit)
Certification path (if available)
Google Cloud certifications that align with this area include: – Professional Cloud DevOps Engineer – Professional Cloud Architect – Associate Cloud Engineer
(Cloud Deploy itself is usually part of broader DevOps and application delivery skills, not a standalone certification.)
Project ideas for practice
- Multi-service pipeline: two microservices, shared pipeline conventions, separate targets.
- Separate projects per env: dev project and prod project, cross-project Artifact Registry access (careful IAM).
- Policy and approvals: enforce mandatory production approvals and restricted promotion permissions.
- Observability integration: link deployments to dashboards and alerts; create a “post-deploy verification” step.
- Rollback game day: simulate a bad release and practice redeploying last known good release.
22. Glossary
- Application development: The practice of building, testing, delivering, and operating software applications; in Google Cloud this includes CI/CD, runtimes (GKE/Cloud Run), and supporting services.
- Artifact Registry: Google Cloud service for storing container images and other build artifacts.
- Approval gate: A requirement for human approval before proceeding to the next deployment stage.
- Cloud Build: Google Cloud CI service that executes builds and can run deployment/render steps.
- Cloud Deploy: Google Cloud managed continuous delivery service for orchestrating releases and rollouts to targets like GKE/Cloud Run.
- Delivery pipeline: Cloud Deploy resource defining ordered stages/targets for release promotion.
- Execution service account: Service account used by Cloud Deploy execution to deploy to targets.
- GKE (Google Kubernetes Engine): Managed Kubernetes service on Google Cloud.
- Promotion: Advancing a release to a later target/stage.
- Release: Versioned bundle in Cloud Deploy representing what to deploy (config + image references).
- Rollout: The process/execution of deploying a release to a specific target.
- Skaffold: Tool for building, rendering, and deploying applications—often used by Cloud Deploy for render/deploy steps.
- Target: A Cloud Deploy resource representing a deployment destination (cluster, Cloud Run location, etc.).
23. Summary
Cloud Deploy is Google Cloud’s managed continuous delivery service for orchestrating releases, rollouts, and promotions across multiple environments—commonly for GKE and Cloud Run—with IAM-based control and optional approvals.
It matters because it standardizes how teams deliver software: build artifacts once, promote consistently, keep an audit trail, and reduce production risk through gated promotions and repeatable rollouts.
Cost-wise, your biggest drivers are often Cloud Build execution, runtime environments (Cloud Run/GKE), Artifact Registry storage/pulls, and logging—so design environments thoughtfully and monitor usage. Security-wise, focus on least-privilege execution service accounts, strong IAM separation between dev and prod, and avoiding secrets in manifests.
Use Cloud Deploy when you want a Google Cloud-native CD control plane for application development teams deploying containers to GKE/Cloud Run with governance. Next step: read the official Cloud Deploy docs and implement a production-grade pipeline with separate environments (ideally separate projects), stricter IAM, and automated verification gates.