GitOps vs Pipeline Deploy
Two deployment models.
GitOps and pipeline deploys are different
The two models invert the trust direction. Pipeline deploys push from CI into the cluster; GitOps has an in-cluster controller pull from git. The inversion changes the security model and the failure modes.
- Pipeline deploy. CI runs
kubectl applyorterraform applyper deploy; CI holds cluster credentials. - GitOps. In-cluster controller (Argo CD, Flux) pulls from git per cluster; cluster initiates the pull, CI does not push.
- Inverted trust model. Cluster trusts git, not CI; reduces attack surface from CI compromises since cluster credentials never leave the cluster.
- Documented choice per pattern. "We use X" decision per org; mixed-mode confusion is the failure mode without it.
When GitOps wins
GitOps wins on multi-cluster, compliance, and disaster recovery. Each scenario leans on the pull model: pulling scales across clusters, the declarative state is auditable, and recovery rebuilds the cluster from git automatically.
- Multi-cluster. Pulling from a shared git repo is the only sane shape past 10 or so clusters; pushing to each from CI does not scale.
- Compliance. Auditable declarative state with built-in drift detection; auditors love GitOps because the source of truth is git.
- Disaster recovery.
argocd app syncrebuilds a cluster from git; the cluster reconstructs itself without manual reapply. - Named GitOps tool per cluster. Argo CD or Flux choice per cluster; "we use both" sprawl is the failure mode.
When pipeline deploy wins
Pipeline deploy wins on simple operations, non-Kubernetes targets, and imperative steps. GitOps overkill in those cases adds complexity without operational benefit.
- Single cluster, simple operations. CI pipeline is enough at small scale; GitOps adds operational cost without clear benefit.
- Non-Kubernetes deploys. Serverless, EC2, on-prem targets; GitOps tools focus on Kubernetes and bolt awkwardly onto other surfaces.
- Imperative steps. Database migrations, traffic shifts, and other orchestration that benefit from procedural control flow rather than declarative state.
- Named owner per pipeline. Responsible team per pipeline catches stalled pipelines that nobody owns.
Hybrid is increasingly common
Hybrid splits by deploy target. GitOps owns Kubernetes manifests, CI pipelines own everything else, and the image-build-plus-manifest-update pattern bridges them.
- GitOps for Kubernetes. Manifest-driven deploy per cluster; the standard pattern at any meaningful scale.
- CI pipeline for the rest. Serverless, EC2, on-prem deploys per target; standard pipeline shape outside Kubernetes.
- Image-build pipeline plus GitOps. CI builds and pushes the image, updates the manifest repo, GitOps applies; the common shape that covers most workflows.
- Documented split per org. "GitOps does X, pipeline does Y" doc per org catches "which tool deploys Z" confusion.
How to pick
The pick is shape-driven. Small team plus single cluster goes pipeline; multi-cluster or compliance pressure goes GitOps; mixed workloads end up hybrid by necessity.
- Single cluster, small team. Pipeline deploy pick; GitOps is overkill at the scale and the operational cost outweighs the benefit.
- Multi-cluster or compliance. GitOps with Argo CD or Flux pick; scales naturally and produces the audit trail compliance regimes require.
- Mixed workloads. Hybrid pick; GitOps for Kubernetes, pipelines for the rest. Most production orgs land here.
- Documented driver per decision. Named "why this pattern" rationale catches drifted defaults that nobody owns.