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.
gitlab-ci
# 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.
.gitlab-ci.yml
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.
Related guides
GitLab CI "may allow multiple pipelines to run for a single action"Fix the GitLab CI warning that a job may allow multiple pipelines for a single action - caused by rules that…
GitLab CI Trigger Job Fails - Downstream Pipeline FailedFix a GitLab CI trigger job that fails because its downstream (child or multi-project) pipeline failed, with…
GitLab CI Review App Deploy Failed (Kubernetes)Fix GitLab CI review app deploys to Kubernetes that fail - image pull errors, missing namespace, RBAC denials…