ALREADY_IN_PROCESS: another deployment is in progress
An org can run only one deployment at a time. Your deploy is queued behind a deployment someone (or some automation) already started. Wait for it to finish, or — if it's stuck — cancel it via the Deployment Status page.
Also seen asALREADY_IN_PROCESS·another deployment is in progress·deployment in progress·ALREADY_IN_PROCESS another
Short answer: you can't run two deploys against the same org simultaneously. The platform serialises them.
Why this fires
Three common causes:
- A teammate kicked off a deploy from VS Code or a CI pipeline at the same time you did.
- A previous deploy of yours hung — it claims to be running but the process holding it died. The lock didn't release.
- A scheduled change-set deploy or quick-deploy validation is currently in flight; your CLI deploy is queued behind it.
How to see who's holding the lock
- Setup → Deploy → Deployment Status lists all in-flight and queued deploys, with the user who initiated each. The status column tells you
In Progress,Pending,Canceling, orFailed. - The CLI:
sf project deploy report(or legacysfdx force:source:deploy:report) returns the live status of your own job and any conflicts.
Cancel a stuck deploy
From the Deployment Status page, click the deploy and choose Cancel. From the CLI:
sf project deploy cancel --job-id 0Af...
If the deploy is stuck in Canceling, you may need to wait — the platform finishes the in-flight component and then releases. If it stays stuck more than 10 minutes, log a Salesforce support case; only Salesforce can force-release a wedged deployment lock.
Avoid this in CI
Two patterns work:
- Serialise your CI jobs so only one can deploy to the same target at a time. Most CI tools have concurrency keys; key on the org's MyDomain or the integration user.
- Pre-flight check. Before deploying, run
sf project deploy report --target-org Xand bail out if anything is in progress. Adds a few seconds; saves a frustrating queue.
When you actually need to interrupt
Two deploys to the same org can coexist if they target different namespaces (e.g., main org + a managed-package developer org tied to the same alias). But that's an unusual setup; in 99% of cases this error means: wait or cancel.
