Design a CI/CD Pipeline for a Microservices Platform
Context
You are designing a CI/CD system for a containerized microservices platform deployed to cloud infrastructure (e.g., Kubernetes), with multiple teams contributing services in different languages. The goal is to ship changes safely and quickly while controlling cost and ensuring reliability and security.
Requirements
Describe a practical end-to-end design that covers:
-
Repository strategy
-
Monorepo vs. polyrepo trade-offs and tooling
-
Branching model
-
Trunk-based development vs. GitFlow; release/versioning
-
Build and isolation
-
Containerized builds, ephemeral runners, parallelization
-
Dependency caching
-
Language/package caching, Docker layer caching
-
Artifact storage
-
Images, packages, provenance/signing, retention
-
Testing strategy
-
Unit, integration, and end-to-end tests; test selection and flake management
-
Security scanning and supply chain
-
SAST/DAST, SCA, container scanning, SBOM, signing, policy
-
Secrets management
-
CI secrets, workload identity, runtime secrets
-
Environment promotion
-
Dev → staging → prod; approvals; GitOps vs. imperative
-
Progressive delivery
-
Canary and blue‑green deployments; automated analysis and rollback
-
Rollback strategy
-
App and database strategies; feature flags; version pinning
-
Observability
-
Logs, metrics, traces; SLOs; CI observability and DORA metrics
-
Runner scaling and cost controls
-
Autoscaling, spot/preemptible, caching, retention, concurrency controls
State any assumptions you make, call out risks/pitfalls, and explain key trade-offs.