Argo CD app stuck "OutOfSync" not converging in CI
By Daniel Zoghalchali·Latchkey
An Application reports OutOfSync when live state differs from the target revision in Git. If it stays OutOfSync after a sync, something in the cluster keeps mutating the resource back, or Argo CD is diffing a field the cluster sets itself.
What this error means
argocd app sync reports success but the Application immediately returns to OutOfSync, or a CI argocd app wait --sync never sees Synced and eventually times out.
argocd
Name: my-app
Sync Status: OutOfSync from HEAD (a1b2c3d)
GROUP KIND NAMESPACE NAME STATUS HEALTH
apps Deployment prod api OutOfSync Progressing
Diagnose it: state, credentials, or drift?
Infrastructure failures in CI are usually about state access or credentials rather than the configuration itself. Confirm the runner can reach and lock state before reading the plan output.
An admission webhook, HPA, or another operator sets a field (replicas, annotations, resources) that is not in Git, so Argo CD sees a perpetual diff.
Argo CD diffs a server-populated field
Defaults the API server injects (for example a status block or a defaulted field) show as drift unless they are ignored or applied with server-side apply.
How to fix it
Ignore fields that other controllers own
Run argocd app diff <app> to see exactly which field drifts.
Add an ignoreDifferences entry for that field so Argo CD stops fighting the owning controller.
Use ignoreDifferences for fields owned by HPA, webhooks, or other controllers.
Prefer ServerSideApply so API-server defaults do not read as drift.
Run argocd app diff in CI to catch a perpetual diff before it blocks a wait.
Frequently asked questions
What causes Argo CD app stuck "OutOfSync" not converging in CI?
There are 2 common causes: a controller or webhook mutates the resource and argo cd diffs a server-populated field. An admission webhook, HPA, or another operator sets a field (replicas, annotations, resources) that is not in Git, so Argo CD sees a perpetual diff.
How do I fix Argo CD app stuck "OutOfSync" not converging in CI?
There are 2 fixes depending on which cause you have: ignore fields that other controllers own and use server-side apply for defaulted fields. Work through them in order, since the first is the most common.
What does Argo CD app stuck "OutOfSync" not converging in CI actually mean?
argocd app sync reports success but the Application immediately returns to OutOfSync, or a CI argocd app wait --sync never sees Synced and eventually times out.
How do I stop Argo CD app stuck "OutOfSync" not converging in CI happening again?
Use ignoreDifferences for fields owned by HPA, webhooks, or other controllers. The prevention section lists 3 changes that keep it from recurring.