Skip to content
Latchkey

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.sh

Common 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.sh

Place blocking gates last

  1. Keep intentionally blocking manual jobs in the final stage.
  2. Use allow_failure:true for optional or informational manual jobs.
  3. 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

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →