What is the difference between Continuous Integration, Continuous Delivery, and Continuous Deployment?
Three distinct (but related) practices on a spectrum of automation.
Continuous Integration (CI) — developers frequently merge code into a shared branch (typically multiple times per day). Each merge triggers an automated build + tests.
Goal: catch integration bugs early.
Continuous Delivery (CD) — every change that passes CI is automatically prepared for production deployment (built, tested, packaged), but the actual deploy to prod requires a manual approval / button push.
Goal: code is always in a deployable state.
Continuous Deployment — every change that passes CI/CD is automatically deployed to production with no manual gate.
Goal: zero-touch delivery; only failed tests block release.
Spectrum: CI → Continuous Delivery → Continuous Deployment, each adding more automation.
Don't conflate Continuous Delivery and Continuous Deployment — that's a classic interview trap. Delivery = always shippable, manual approval.
Deployment = fully automated to prod, no manual step.