Argo CD 3.1 to 3.2 upgrade

A practical plan for moving a running Argo CD 3.1 installation to 3.2, covering the breaking changes in the official notes, preparation, sequencing, testing and rollback.

On this page

Why plan the Argo CD 3.1 to 3.2 upgrade before touching production

Moving from Argo CD 3.1 to 3.2 is a single minor-version step, but it changes behavior that can affect running applications, so treat it as a planned change rather than a routine image bump. The breaking changes to handle first are the non-root path requirement for Source Hydrator applications, the CronJob health change that can turn applications Degraded, the Kustomize version set in .argocd-source.yaml, and deprecated repo-server gRPC fields. Argo CD ships a minor release four times a year, about once every three months, and only the three most recent minor versions receive patch releases, according to the Argo CD release process. The October 12, 2026 patch releases covered v3.5.5, v3.4.11 and v3.3.16, so a 3.1 instance was already outside the patch window. Confirm the current list on that page before you pick a target, because the window moves with each new minor release.

The supported path is to read the 3.1 to 3.2 upgrade notes in full before changing anything, then map each item to your own environment. Start with an inventory. Identify every Source Hydrator application and check whether its output path is at the repository root, since stale root-level output from earlier versions is not cleaned up automatically. Then list every CronJob that Argo CD manages, because jobs that run for a while can flip between Healthy and Degraded unless you set resource.customizations.health.batch_CronJob or the argocd.argoproj.io/ignore-healthcheck annotation. The 3.1 to 3.2 upgrade notes are the reference for exact behavior, so record which items apply to you and who owns each fix.

Make the go or no-go decision on evidence from a non-production instance. Run the upgrade against a copy that mirrors your Git layout, Kustomize sources and cluster list, then compare application health and sync status before and after. Confirm which Kustomize version each source pins and whether your repo-server configuration uses any of the deprecated gRPC fields. Plan a rollback path, including a backup of the Argo CD configuration and the Kubernetes objects it manages, before the production change is scheduled.

Which 3.2 changes can break applications and how to handle each

This table lists the Argo CD 3.2 changes that can affect running applications, the impact of each, and the action to take before cutover. Read each row against your own Source Hydrator, CronJob and repo-server configuration, since only some changes will apply to your installation. Where the supplied notes do not give exact behavior, confirm it in the official 3.1 to 3.2 upgrade notes and the release page before you plan the window.

ChangeImpactAction needed
Source Hydrator applications need a non-root pathFrom 3.2 each Source Hydrator application needs a non-root path, and stale root-level output from earlier versions is not cleaned up automaticallyFind every Source Hydrator application that writes to the repository root, move output to a dedicated path, and remove leftover root-level files by hand
CronJob health changesApplications may turn Degraded, or flip between Healthy and Degraded, while CronJob jobs runDecide per application whether to set resource.customizations.health.batch_CronJob or add the argocd.argoproj.io/ignore-healthcheck annotation, then test with a scheduled job
Kustomize version in .argocd-source.yamlThe Kustomize version pinned in .argocd-source.yaml may change how manifests render for affected applicationsConfirm the exact behavior in the 3.1 to 3.2 upgrade notes and the release page, then render affected applications on a non-production instance and compare output
Deprecated repo-server gRPC fieldsFields flagged as deprecated may stop working or change behavior in a later releaseConfirm which fields are deprecated and their replacements in the 3.1 to 3.2 upgrade notes, then update repo-server configuration before cutover

How the non-root Source Hydrator path requirement affects existing repositories

From Argo CD 3.2, each Source Hydrator application needs a non-root path, and output that earlier versions left at the repository root is not removed automatically. That makes the upgrade a repository task as well as a control plane task. Before you change the version, list every application that uses the Source Hydrator, record the repository, branch and path each one writes to, and mark the ones that currently hydrate to the root. Confirm the exact field layout against the 3.1 to 3.2 upgrade notes for your release, since the path settings and hydration output may differ between configurations you have built.

Once the inventory exists, identify the root-level output those applications produced. Look at the hydrated branch or directory each application targets and compare it with the path the application will use after the upgrade. Files that sit at the root and belong to a previous hydration run are the ones that will linger in Git, because Argo CD will not delete them when the new path takes over. Review these files with the owners of each application, since some may be shared with other tooling or hand-maintained manifests that should stay where they are.

Plan the cleanup as its own change, separate from the version bump. Move each application to its non-root path in a test environment first, confirm that the new output is generated and synced, and then remove the stale root-level manifests in a reviewed commit so they do not reappear in later hydration runs. Keep the Git history as your rollback record, and make sure the cleanup is traceable to the change ticket. Ask your vendor or internal Argo CD owner to confirm how the repository should be cleaned for your setup before the production window, rather than relying on the upgrade to do it.

What to prepare before the Argo CD 3.2 upgrade

Most of the risk in the Argo CD 3.1 to 3.2 move sits in configuration that Argo CD reads at sync time, not in the controller binary itself. The cards below cover what to capture, inventory and test before the cutover, so that you can roll back cleanly and recognize a 3.2 side effect quickly.

Back up Argo CD resources

Export Applications, AppProjects, repository Secrets, and the RBAC and settings ConfigMaps from the argocd namespace before you change anything. Store the export outside the cluster so it survives a failed upgrade. Confirm that the export includes the repository credentials, because a restore without them leaves every application unable to fetch Git content. Treat the backup as a rollback path, not a formality.

Inventory Source Hydrator applications

List every application that uses the Source Hydrator and note its current output path. From 3.2 each Source Hydrator application needs a non-root path, and stale root-level output from earlier versions is not removed automatically. Plan a cleanup step for those paths so that old manifests do not sit beside new ones in the repository.

Find CronJobs that will change health

Identify every CronJob that Argo CD tracks, since 3.2 changes CronJob health so that applications can turn Degraded or flip between Healthy and Degraded while jobs run. Decide per workload whether to keep the new behavior, override the health check with resource.customizations.health.batch_CronJob, or add the argocd.argoproj.io/ignore-healthcheck annotation. Write that decision down before the upgrade.

List .argocd-source.yaml files

Search every repository that Argo CD renders for .argocd-source.yaml files and record the Kustomize settings each one sets. The upgrade notes call out the Kustomize version that these files can pin, so a version that your manifests depend on must be tested explicitly against the new release. Keep the list tied to the application that owns each file.

Scan for deprecated repo-server fields

Review the Argo CD configuration in your Git repository and your Helm values or Kustomize overlays for repo-server gRPC fields that the upgrade notes mark as deprecated. Remove or replace each one in a branch before the cutover, and record the changes so that reviewers can tie them to the upgrade. Ask your platform team to confirm that no custom tooling outside Git sets these fields.

Rehearse on a non-production instance

Stand up a non-production Argo CD seeded with representative applications, including Source Hydrator apps, CronJobs and a repo with .argocd-source.yaml. Run the upgrade there first and compare sync status, health and rendered manifests before and after. Confirm SSO sign-in, the admin.enabled setting and project RBAC on the test instance, since the admin account is only meant for setup and disabling it is a check you should verify afterwards.

How to sequence the 3.1 to 3.2 upgrade with checks and rollback points

This sequence moves an Argo CD 3.1 installation to 3.2 in an order that proves each change on a non-production instance first, keeps a restore point before production changes, and confirms application health before the upgrade is treated as finished.

  1. Back up the current installation

    Your platform team exports the Argo CD namespace objects, including Applications, AppProjects, ApplicationSets, repository and cluster Secrets, the argocd-cm and argocd-rbac-cm ConfigMaps, and the installed manifests or Helm values, and stores them outside the cluster. Confirm the export can be read back and that someone outside the upgrade team can restore it. Rollback point: the backup is the only path back to the 3.1 state if the new version cannot start, so do not continue until it is verified.

  2. Upgrade a non-production instance

    Apply the 3.2 manifests or chart version to a staging instance that manages a copy of your production applications and clusters, using the same SSO and RBAC settings. Watch the application controller and repo-server logs during startup and confirm that every component reports ready. Rollback point: restore the staging backup and reapply 3.1 manifests. Do not promote the change until staging completes a full sync cycle without errors.

  3. Fix Source Hydrator paths and CronJob health settings

    Before the production change, review every Source Hydrator application and confirm it uses a non-root path, since Argo CD 3.2 requires one. Remove stale root-level output from earlier versions manually, because it is not cleaned up automatically. Decide how CronJob health should be handled by setting resource.customizations.health.batch_CronJob or annotating affected CronJobs with argocd.argoproj.io/ignore-healthcheck. Check: staging shows these applications as Healthy or expected, with no unexpected Degraded state while jobs run.

  4. Apply the upgrade to production

    Schedule the production change in a window agreed with the application owners, applying the same manifests or chart values that passed staging. Keep the staging backup procedure ready and record the exact version and configuration applied. Rollback point: if the controller or API server does not become ready, reapply the 3.1 manifests from your backup and confirm reconciliation resumes before investigating further.

  5. Verify replicas after rollout

    If you run the high availability installation, confirm the pods for each component are running on separate nodes. The HA documentation requires at least three nodes for the pod anti-affinity rules, so a smaller cluster will leave replicas unscheduled. Check that the application controller shards and Redis replicas report ready. Rollback point: if replicas cannot schedule, correct node capacity before accepting the upgrade, since a single-node set undermines the availability the HA install provides.

  6. Verify application health and sync status

    Compare application health and sync status against the baseline you recorded before the upgrade. Pay particular attention to CronJob-based applications and Source Hydrator applications. Confirm that SSO login, project permissions and cluster connections still work for a test user. Done when counts of Healthy, Synced and Degraded applications match the baseline or every difference is explained and accepted by its owner.

  7. Monitor and keep the rollback path open

    Watch controller logs, reconciliation errors and application health for a period your change process defines, and keep the 3.1 backup available until that period closes. Track patch releases for the 3.2 minor line, because only the three most recent minor versions receive patch releases according to the release process. Confirm with your change owner when the backup can be retired and the upgrade is recorded as complete.

Which upgrade path fits your installation type

Teams that install Argo CD by applying the project's standard manifests have the most direct upgrade path. The work is a version change to the manifests you hold, followed by a rollout of the Argo CD components. Because no other tool manages those objects, you control the order of apply and the rollback. The 3.1 to 3.2 changes still reach you, but they land mainly in your applications and configuration rather than in the install itself.

  • Backups first: export the Argo CD custom resources, the argocd-cm and argocd-rbac-cm ConfigMaps, and the repository and cluster Secrets before applying anything.
  • Source Hydrator review: list every application that uses the Source Hydrator, since each one needs a non-root path from 3.2 onward.
  • CronJob health: identify applications that contain CronJobs and decide whether to set the health customization or the ignore annotation before cutover.
  • Kustomize version: check every .argocd-source.yaml file and the Kustomize version it requests.
  • Repo-server settings: search your configuration for deprecated repo-server gRPC fields and replace or remove them as the upgrade notes direct.

Confirm each item against the Argo CD 3.1 to 3.2 upgrade notes and test on a non-production instance before cutover.

How to test the 3.2 upgrade and roll back if applications turn Degraded

Test the CronJob health change first, because it is the upgrade item most likely to alter what your dashboards and promotion gates report. Before the upgrade, record the health status of every Application, then compare the same list on a non-production instance running 3.2. Pay particular attention to Applications that contain CronJobs and to any gate that waits for Healthy. Confirm whether each flagged Application is genuinely unhealthy or is only reporting a job that is still running. You then choose between two fixes. Excluding a specific resource with the argocd.argoproj.io/ignore-healthcheck annotation is narrow and suits a few known jobs. Overriding resource.customizations.health.batch_CronJob in argocd-cm changes the rule for every CronJob the instance manages, so test it against each job type you run before applying it cluster-wide. Confirm the exact key and syntax against the Argo CD 3.1 to 3.2 upgrade notes for your build.

Next, test the Source Hydrator and rendering paths. For each hydrated Application, confirm it uses a non-root path and that a sync produces the expected manifests there. Check that stale root-level output from earlier versions is not left behind, because the upgrade notes say it is not cleaned up automatically. Render every Kustomize overlay with the Kustomize version that 3.2 bundles and diff the output against your pre-upgrade render, especially where .argocd-source.yaml pins a Kustomize version. Also check repo-server behavior under real repository load, since the repo-server runs Helm and Kustomize on repository content, and confirm that any deprecated repo-server gRPC fields you set are removed or replaced in your manifests.

For rollback, the state to protect is in Kubernetes objects. Argo CD keeps Applications, AppProjects, ApplicationSets, and repository and cluster Secrets as Kubernetes resources, while Redis is a disposable cache that rebuilds after a restart. Back up those objects in the argocd namespace (and any other namespaces holding Argo CD resources) before the upgrade, and confirm the backup restores in a test cluster. If you need to roll back, reapply the previous manifests or chart version, restore the saved objects, and let the controller resync. Confirm with your own runbook that the previous minor version is still receiving patch releases, since the release process limits patches to the three most recent minor versions.

What makes the Argo CD 3.2 upgrade take longer

This table lists the factors that expand the work of moving from Argo CD 3.1 to 3.2 and what to do about each one. Read it before estimating a plan, because the rows that multiply the most are usually the number of Source Hydrator applications, CronJobs and environments that need testing. Each driver can be scoped on paper before the upgrade window is set.

DriverWhy it mattersHow to reduce it
Source Hydrator applications and root-level outputEach Source Hydrator application needs a non-root path in 3.2, and stale root-level output from earlier versions is not cleaned up automatically.Inventory every hydrator application and its output path, then plan path moves and manual cleanup as separate changes.
CronJobs managed by Argo CDThe 3.2 CronJob health change can mark applications Degraded or flip them between Healthy and Degraded while jobs run.Count CronJobs per application, then decide per group whether to set a health override or the ignore-healthcheck annotation.
Repositories and Kustomize versions in useRepositories that pin Kustomize versions in .argocd-source.yaml may render differently once the bundled version changes.List repositories with version pins, render manifests before and after the upgrade, and diff the output.
Custom health checks and Lua overridesExisting resource health overrides may conflict with the new CronJob behavior or with changed defaults.Export current resource customizations, review each one against the 3.2 upgrade notes, and test them on a copy of the instance.
SSO and RBAC complexityGroup mappings and project roles are the hardest part to verify, and a broken login path blocks every operator during rollout.Keep a documented list of role bindings and test one admin, one project user and one read-only user after the upgrade.
Deprecated repo-server gRPC fieldsConfiguration that still uses deprecated repo-server gRPC fields needs to be found and changed before those fields are removed.Search manifests, Helm values and ConfigMaps for the deprecated fields and confirm the replacement in the upgrade notes.
Number of clusters and high availabilityHA installs with several replicas and controller shards need a rollout order, and each managed cluster adds reconciliation to verify.Confirm the HA layout with the HA documentation, upgrade a non-production instance first, then check replicas and node anti-affinity afterwards.
Environments that need testingEvery environment that runs a different set of applications, repositories or overrides needs its own test pass before production.Define a test matrix per environment, record which applications and overrides it covers, and agree sign-off owners before the window.

Questions teams ask before the Argo CD 3.2 upgrade

How much does the Argo CD 3.1 to 3.2 upgrade cost?

The cost depends on the scope written for your environment, not on a published figure. No public price applies to Argo CD itself, since the Apache-2.0 licensed project has no paid edition. The cost is labor: your internal engineers' time, and any partner fees if you engage outside help. Cost rises with the number of Argo CD instances, applications using Source Hydrator, custom CronJob health rules, Kustomize or Helm plugins, and how much pre-production testing you require. Costs that recur are staff time for patch releases, since the project supports only the three most recent minor versions. Ask any partner for a fixed-scope quote that lists each breaking change in your estate, the testing environment, the rollback plan and the handover deliverables.

How long does an Argo CD 3.2 upgrade take?

Duration depends on how many instances you run and how many breaking changes they touch. A single instance with no Source Hydrator applications and no CronJob resources is far simpler than a fleet with many of each. The work includes reading the 3.1 to 3.2 upgrade notes, inventorying affected applications, testing on a non-production instance, scheduling a change window and checking health after cutover. The main delays come from finding applications whose health status changes, agreeing on a CronJob health approach with application owners, and getting change approval. Ask for a timeline in the written scope that separates inventory, testing and production cutover.

What does the upgrade need from our internal team?

The work needs people who know your Argo CD configuration and the applications it deploys. Typically that means a platform engineer who owns the Argo CD install, an application owner for each affected workload, and someone who can approve the change. Engineers must be able to read Application manifests, Kustomize files and the repo-server settings in use. Plan time for application owners to confirm which CronJobs should keep their current health behavior and which should be ignored, and for security or change managers to review evidence. Ask your partner or internal lead to list these roles in the scope so no step depends on one person.

Can our in-house team upgrade Argo CD 3.1 to 3.2 alone?

Yes, many teams can, provided they have a working non-production copy and engineers who understand the affected settings. The upgrade notes are specific: Source Hydrator paths must be non-root, stale root-level output is not cleaned up automatically, CronJob health can change application status, and the Kustomize version in .argocd-source.yaml and deprecated repo-server gRPC fields need review. An in-house team should check each of these against its own repositories before touching production. If no one has run Argo CD upgrades before, or the fleet is large, a partner can share the work, but the internal team still needs to own the decisions.

Should a partner handle only the breaking-change fixes?

A partner can be scoped to remediate only the breaking changes, leaving the version bump and routine operations with your team. This suits teams that have upgrade experience but lack time to audit Source Hydrator paths, CronJob health and deprecated settings across many repositories. The written scope should name each breaking change, the repositories and applications in view, the fix to be applied, who approves it and how it is tested. Confirm who owns rollback if a fix causes a regression, and whether the partner's work is delivered as version-controlled changes your team can review.

What should we confirm with the vendor and the upgrade notes?

Confirm the details against the official 3.1 to 3.2 upgrade notes and the release notes for the exact patch level you will run, since patch releases change. Check whether each Source Hydrator application already uses a non-root path, and whether old root-level output must be removed by hand. Confirm the exact configuration keys for CronJob health, including resource.customizations.health.batch_CronJob and the argocd.argoproj.io/ignore-healthcheck annotation, and how your Kustomize version is pinned. Verify the deprecated repo-server gRPC fields you use. Ask your team to record each answer in the change ticket before cutover.

How does the 3.1 to 3.2 step relate to later upgrades?

The 3.1 to 3.2 step is one minor-version move in a series. The project releases a minor version four times a year and supports only the three most recent minor versions with patch releases, so staying on 3.1 means falling behind on fixes. Each later step, such as the 3.2 to 3.3 move, has its own upgrade notes, and changes made now, like pinning Kustomize or moving Source Hydrator paths, affect what the next upgrade must handle. Ask for the plan to cover the path to the current supported line, not only this step, and confirm the target version before scheduling work.

How DeployOpen scopes and delivers the Argo CD 3.2 upgrade

DeployOpen plans the Argo CD 3.1 to 3.2 upgrade as a fixed-scope piece of work inside your own infrastructure. We start from your Source Hydrator applications, health checks and Kustomize usage, then test each change on a non-production instance before any cutover.

How we scope

  • Inventory every Source Hydrator application and confirm which ones need a non-root path before 3.2.
  • Identify CronJob resources whose health status may change, and agree whether to customize health or annotate them.
  • Record Kustomize versions used in .argocd-source.yaml files and repo-server settings that touch deprecated gRPC fields.
  • Agree the written scope, deliverables and timeline with you before any work starts.

How we build

  • Move Source Hydrator output to non-root paths and plan removal of stale root-level output from earlier versions.
  • Apply the CronJob health customization or ignore-healthcheck annotation chosen for each affected application.
  • Test the upgrade on a non-production instance and compare application health and sync status before and after.
  • Document each configuration change so reviewers can trace it back to the upgrade notes.

How we hand over

  • Deliver a written change record listing every modified application, manifest and configuration key.
  • Provide a rollback procedure and backup checkpoints agreed with your operations team before cutover.
  • Walk your platform engineers through the verification checks they will repeat on future minor upgrades.
  • Confirm with you which open items remain, such as Kustomize version alignment across repositories.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after handover.
  • Use the retainer to plan the next minor release, which the Argo CD project ships four times a year.
  • Ask for a quote based on the written scope, since DeployOpen does not publish a price list.
  • Confirm patch-release coverage for your running minor version with the project's current release policy.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.