Helm Release Stuck "uninstalling" / "pending-install" - Fix Stuck Status in CI
Helm records a release status in its history. If an install/upgrade/uninstall is interrupted (the CI job was killed, the API timed out mid-operation), the release is left in a transient status like pending-upgrade or uninstalling, and the next Helm command refuses to proceed.
What this error means
helm upgrade/uninstall fails because the release is pending-install, pending-upgrade, or uninstalling, or a later operation errors with another operation (install/upgrade/rollback) is in progress. helm status confirms the stuck transient state.
$ helm status api
STATUS: pending-upgrade
$ helm upgrade api ./chart
Error: UPGRADE FAILED: another operation (install/upgrade/rollback) is in progressCommon causes
A Helm operation was interrupted
The CI job was cancelled, the runner died, or the API call timed out while Helm was mid-install/upgrade/uninstall, so it never wrote a terminal status - leaving a transient one.
Concurrent Helm operations on one release
Two pipelines (or a retry overlapping the original) operate on the same release, and one leaves it pending while the other tries to proceed.
How to fix it
Inspect history and roll back to a deployed revision
For a stuck pending-upgrade, rolling back to the last good revision returns the release to a terminal deployed status.
helm history api
helm rollback api <last-deployed-revision>
helm status apiPrevent overlapping operations
- Serialize Helm operations on a given release; do not run two pipelines against it concurrently.
- Use
--atomicso a failed upgrade auto-rolls back to a terminal state instead of staying pending. - Ensure CI does not kill the Helm step mid-operation (adequate step timeout).
How to prevent it
- Serialize deploys per release so operations never overlap.
- Use
--atomic/--cleanup-on-failso failures land in a terminal status. - Give the Helm CI step enough time to finish so it is not interrupted.