GitLab CI Manual Job Blocks the Pipeline (allow_failure)
A manual job with when: manual and no allow_failure: true is a blocking gate: the pipeline shows "blocked" and downstream stages will not run until the job is started or the pipeline is canceled.
What this error means
The pipeline status is blocked rather than running or passed, and later stages never execute because a manual job is waiting for a click.
# Pipeline status: blocked
deploy:
stage: deploy
when: manual # blocking by default
script: ./deploy.shCommon causes
Blocking manual job by default
Manual jobs are blocking unless allow_failure:true is set, so the pipeline waits indefinitely.
Manual job in an early stage
A blocking manual gate placed before other stages stops everything behind it.
How to fix it
Make optional manual jobs non-blocking
Set allow_failure:true so the pipeline proceeds without waiting for the manual job.
deploy:
stage: deploy
when: manual
allow_failure: true
script: ./deploy.shPlace blocking gates last
- Keep intentionally blocking manual jobs in the final stage.
- Use allow_failure:true for optional or informational manual jobs.
- Document which manual gates are meant to block releases.
How to prevent it
- Decide deliberately whether each manual job should block.
- Set allow_failure:true for optional manual jobs.
- Keep blocking gates in late stages.