Good question—this really depends on team size, product complexity, and how much control you want over releases.
In most modern setups, CI and CD are logically separate but often live in the same pipeline/tooling:
Separating them conceptually has a few benefits:
But fully separating them into different systems isn’t always necessary. Many teams use a single pipeline with distinct stages (e.g., build → test → stage → approve → deploy).
Where separation becomes more important:
So in practice, it’s less about strict separation and more about clear stage boundaries and control points within your pipeline.
Curious how others here are handling this—especially with GitOps and progressive delivery patterns becoming more common.