Argo CD vs Flux vs Jenkins X: The GitOps Deployment Playbook
A team runs twelve microservices across three clusters and nobody can say which commit is live. The fix is GitOps: Git is the single source of truth and a controller pulls the cluster toward it. Argo CD is a delivery controller with a visual UI. Flux is a set of small controllers with no UI in the core distribution. Jenkins X, renamed JayeX in April 2026, is a full CI and CD platform that builds the image, versions it, and promotes it through environments.
Three tools, three jobs
Argo CD is a declarative GitOps continuous delivery tool for Kubernetes. Git holds the desired state; an application that deviates from it is OutOfSync. It accepts Kustomize, Helm, Jsonnet, plain YAML or a custom plugin, tracks branches, tags or a pinned commit, and ships a web UI, a CLI, and SSO.
Flux is a set of continuous and progressive delivery solutions for Kubernetes, open and extensible, and a CNCF Graduated project. Describe the desired state in Git and Flux syncs it automatically. No central server, no required UI: a bootstrap installs four controllers — source, kustomize, helm and notification — and the Kubernetes API is the Flux API. It supports Kustomize, Helm, webhooks, RBAC and OCI.
JayeX, formerly Jenkins X, is the widest of the three. Its homepage lists multi-cluster GitOps, Tekton pipelines, secrets management, pull request ChatOps and preview environments. It creates the CI pipeline for a new repository, builds and versions the image, then promotes it with pull requests. The CD Foundation announced the rename on April 16, 2026; the remaining Jenkins integrations are deprecated and will eventually be removed.
Version lines, November 2026
| Tool | Current line | What changed lately | Authority |
|---|---|---|---|
| Argo CD | 3.6.1 (3.6.0 GA Nov 3, 2026) | Quarterly minors; three newest supported; 3.3 EOL Nov 3, 2026 | Argo CD release-process docs; project GitHub releases |
| Flux | v2.10.0 GA (October 2026) | SPIFFE mTLS; object identity GA; alerting APIs stable at v1 | Flux 2.10 GA announcement |
| JayeX (jx CLI) | v3.17.122 (Nov 3, 2026) | Renamed April 16, 2026; Jenkins integrations deprecated | CD Foundation announcement; project GitHub releases |
A 2024 tutorial can mislead you on all three. Argo CD supports only the three newest minors, so a cluster on 3.3 is now unsupported. Flux 2.10 deprecates notification v1beta3, so old manifests need flux migrate. Compare build minutes in the GitHub Actions vs GitLab CI vs CircleCI pricing playbook before deciding whether JayeX replaces your CI or only your CD.
Sync mechanics: how Git becomes the cluster
Argo CD syncs through the Application custom resource, which names a source and a destination. Automated sync, configured with spec.syncPolicy.automated, makes the controller apply changes itself: CI pipelines no longer need direct access to the Argo CD API server, because the pipeline makes a commit and push to Git and Argo CD does the rest. Three defaults catch new operators: prune, selfHeal and allowEmpty are all off. Rollback cannot be performed against an application with automated sync enabled, so the fix for a bad deploy is a Git revert, not a rollback command.
Flux syncs through a chain of small resources. A GitRepository tells the source-controller where to fetch from — the tutorial example uses an interval of 1 minute. A Kustomization tells the kustomize-controller which path to apply — the tutorial example uses a 30-minute interval, prune true, wait true, and a 2-minute retry interval. Each object reconciles on its own interval, and can be suspended and resumed with flux suspend and flux resume.
JayeX syncs through a git operator that polls the Git repository and runs a Kubernetes Job on each change. The 3.x model differs from 2.x: 2.x kept one repository per environment; 3.x uses a single Git repository when those environments share a cluster, and one repository per cluster when environments span clusters. Pipelines are vanilla Tekton YAML from the jx3-pipeline-catalog, and importing a project is itself a GitOps operation: a pull request registers the application and promotion starts.
Drift detection: who notices, and how fast
Argo CD detects drift on a 120-second reconciliation interval by default, with 60 seconds of jitter, for a maximum of 3 minutes. Worst case, a manual kubectl edit sits live for up to 3 minutes before the Application is flagged OutOfSync. Webhooks shorten the Git side of the wait; selfHeal, once enabled, reverts drift after a 5-second default timeout. Automated sync alone reconciles only a changed target state; reverting an out-of-band change needs selfHeal.
Flux detects drift per object, on the intervals you set. The tutorial defaults are a 1-minute poll on the GitRepository and a 30-minute reconcile on the Kustomization: removing a manifest from the repository removes it from the cluster, and a kubectl edit is reverted to the Git state. Suspend with flux suspend kustomization to edit objects directly; flux resume hands control back.
JayeX detects drift at the environment level, not the resource level. Each release creates a pull request per environment. When approval holds production back while staging moves on, the environments drift apart by design; the remedy is jx updatebot sync, which creates a single pull request that adds missing applications or upgrades them between two environments. Drift detection here is pull-request shaped: visible and reviewable, but slower than a controller loop.
Multi-cluster promotion
Argo CD manages many clusters from one control plane and scales the pattern with ApplicationSets. An ApplicationSet is a factory: generators produce parameters, a template renders Applications. The docs list nine generators — List, Cluster, Git, Matrix, Merge, SCM Provider, Pull Request, Cluster Decision Resource, Plugin — plus OCI. The Cluster generator builds one Application per cluster registered with Argo CD, so adding a cluster adds its Applications. Caution: for an ApplicationSet-managed Application, changing spec.syncPolicy.automated has no effect — the ApplicationSet overwrites it.
Flux handles multi-cluster without a central control plane. One Kubernetes cluster can manage apps in the same or other clusters, including lifecycle through Cluster API. Tenancy is enforced through Kubernetes RBAC via impersonation: the kustomize-controller acts with only the tenant's permissions. The trade: no central UI or server, so a fleet view comes from the Flux Operator Web UI or a hosted offering, not the core install.
JayeX promotes through pull requests, through its promotionStrategy field: Auto, Manual or Never. Auto merges the promotion pull request when its pipeline succeeds; all local Auto environments share one pull request. Manual keeps the pull request a draft until a human comments /approve and cancels the hold with /hold cancel. Never creates no promotion pull request. By default, each new version goes straight to staging; production waits for a human. For the cluster underneath, see the Docker vs Kubernetes vs Amazon ECS playbook and the Nomad vs Kubernetes vs Docker Swarm playbook.
Image updates and progressive delivery
Flux image automation closes the loop: the image-reflector-controller scans the registry for tags, an ImagePolicy selects the latest tag in a semver range such as 1.0.x, and the image-automation-controller commits the updated image reference back to Git, triggering a normal sync. Flux 2.10 adds batched image update commits and push retries.
Argo CD core syncs when Git changes, so a new image reaches the cluster when a commit changes the tag. For rollout shape, Argo CD ships PreSync, Sync and PostSync hooks supporting blue/green and canary upgrades, plus sync waves that order resources inside one sync. There is no canary controller in the core install.
JayeX takes the pipeline road: a release pipeline builds the image, versions it, creates the Helm chart, then promotion pull requests carry it through environments. Preview environments are the headline feature: a pull request spins up a live environment running the change for review before merging.
The monthly cost math, reproduced
All three tools carry a $0 licence: each is an open-source project with no paid tier on the vendor pages. Commercial distributions exist; their support prices were not opened and are not printed here. Cluster inputs are verified DigitalOcean list prices: Basic nodes from $12 a month, a load balancer at $12 a month, the control plane free, high availability at $40 a month. Operator hours and the $75 hourly rate are labelled editorial assumptions, not vendor figures.
Why the hours differ: Flux has four small controllers, Argo CD adds a UI, a repo server, Redis and Dex, and JayeX adds Tekton pipelines, a version stream, a boot operator and preview environments. Annual totals at $75 an hour: $3,276 for Argo CD, $2,376 for Flux and $5,976 for JayeX. Check your own rate with the ROI Calculator.
JayeX pays for itself when the CI spend it removes exceeds its operator premium over Flux:
Above $300 a month in CI spend, JayeX is cheaper than Flux plus that CI bill. Below $300, Flux plus a standalone CI service costs less. The threshold moves with your hourly rate: $200 at $50 an hour, $400 at $100 an hour.
Cost at fleet scale
Assume Argo CD and Flux add 0.5 operator-hours per extra cluster, JayeX 1.5 hours. Infrastructure is $48 per cluster on the verified prices above.
| Clusters | Infrastructure | Argo CD total | Flux total | JayeX total | Authority |
|---|---|---|---|---|---|
| 1 | $48 | $273 | $198 | $498 | DigitalOcean pricing; labelled hour assumptions |
| 3 | $144 | $444 | $369 | $819 | DigitalOcean pricing; labelled hour assumptions |
| 10 | $480 | $1,042.50 | $967.50 | $1,942.50 | DigitalOcean pricing; labelled hour assumptions |
At ten clusters JayeX costs roughly double Flux. High availability adds $40 a month per cluster on DigitalOcean, and block storage starts at $10 a month — neither is in the table above.
Worked example: twelve apps, three clusters
Twelve microservices, three clusters. On Argo CD, one ApplicationSet with the Cluster generator produces thirty-six Applications from one template: $444 a month. On Flux, one Kustomization and one GitRepository per cluster does the same job for $369. On JayeX, each release creates promotion pull requests and preview environments: $819 a month. Our editorial analysis found Flux the cheapest, Argo CD the most visible, and JayeX the most complete — and the $450 monthly gap between Flux and JayeX is exactly the price of the CI pipeline, the version stream and the preview environments.
Choose in eight steps
- List every cluster, environment and application, and mark which environments need human approval.
- Decide the scope: delivery only, delivery plus image automation, or full CI plus CD.
- Delivery only: Argo CD when the team wants a UI, Flux when it wants the smallest moving surface.
- Image automation: choose Flux, one ImagePolicy per service with a semver range.
- CI included: choose JayeX and confirm the team accepts Tekton pipelines.
- Set the drift policy in writing: prune, selfHeal, ignoreDifferences.
- Run one application end to end: commit a change, watch the sync, revert the commit, watch the rollback.
- Price the fleet with the formulas above at your own hourly rate.
Execution checklist
- [x] Scope decided
- [x] Version line checked
- [x] Drift policy written
- [x] Promotion gates set
- [x] One application deployed end to end, rolled back by Git revert
- [x] Monthly cost modelled at 1, 3 and 10 clusters
- [x] Exit confirmed: everything reproducible from Git alone
Who should not use which
Do not pick Argo CD if your team will not maintain its control plane — UI, repo server, Redis, Dex; an unmaintained UI is a security liability, not a feature. Do not pick Flux if developers need sync state without learning kubectl and the flux CLI. Do not pick JayeX if you already run a CI service you trust, or are not ready to own Tekton pipelines and a version stream; adopting it halfway leaves two CI systems to maintain. And do not pick any of the three with no Kubernetes cluster yet — the GitOps decision comes after the cluster decision.
Founder & CEO Insight — Enow A. Jovial
The decision in advance
Argo CD, for delivery with a visual view and a single control plane: $273 a month, ApplicationSets carrying the fleet. Flux, for the smallest surface and built-in image automation: $198 a month, the Kubernetes API as the interface, no UI to maintain. JayeX, for one platform from commit to production with preview environments on every pull request: $498 a month, earning that premium only when it replaces a CI bill above $300 a month. Run your own hours and rate through the formulas, commit the decision to Git, and let the controller do the rest.
