GitLab CI Manual Job Blocks the Pipeline - "blocked" / allow_failure
A manual job pauses the pipeline until someone clicks "play". If that gate is required (not allow_failure), the pipeline stays "blocked" and later stages never run until it is triggered.
What this error means
The pipeline shows status "blocked" and does not complete. A manual job is waiting for a human, and downstream jobs that need it are stalled - or a deploy never happens because nobody triggered the gate.
Pipeline status: blocked
Job 'deploy_production' is manual and required - waiting for action.
Downstream stages will not run until it is played or the pipeline is cancelled.Common causes
Required manual gate never triggered
A when: manual job without allow_failure: true is a blocking gate. Until someone plays it, the pipeline is "blocked" and dependent stages wait.
allow_failure misconfigured for the intent
Making a gate allow_failure: true lets the pipeline proceed without it (non-blocking); leaving it false makes it required. Choosing the wrong one produces the opposite of the intended flow.
How to fix it
Make the gate blocking or non-blocking deliberately
Decide whether the manual step must gate the pipeline, and set allow_failure accordingly.
deploy_production:
stage: deploy
when: manual
allow_failure: false # required gate: pipeline blocks until played
script: ./deploy.sh
optional_smoke:
when: manual
allow_failure: true # optional: pipeline proceeds without it
script: ./smoke.shTrigger or cancel the blocked pipeline
- Open the pipeline and click "play" on the manual job to release the block.
- If the gate is no longer needed, cancel the pipeline so it does not sit blocked.
- For environment-protected manual deploys, confirm you have permission to run the job.
How to prevent it
- Set
allow_failureexplicitly on every manual job to match blocking intent. - Document which manual gates are required vs optional.
- Use protected environments so only authorized users can play deploy gates.