Skip to content

Introduce the manual keyword

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

Problem 1: allow_failure

Problem 1.a.

We control the blocker behavior of a manual job by the allow_failure keyword. Actually, it has other responsibilities; "determine whether a pipeline should continue running when a job fails".

A manual job is not a blocker when it has allow_failure: true (by default). It's a blocker when it has allow_failure: false. We cannot have a manual job that is allow_failure: false and not a blocker.

job1:
  stage: test
  when: manual

job2:
  stage: deploy

job1 is just skipped and job2 runs. And when we run job1, if it fails, it's allowed to fail. The decision to block depends on allow_failure.

related issue: #20237

Problem 1.b.

We have two different "blocker" behaviors of manual jobs according to their dependants: DAG or STAGE.

job1:
  stage: test
  when: manual

job2:
  stage: deploy
  needs: [job1]

job1 is just skipped but it blocks job2 because of the DAG relation.

Proposal

  • manual: and when: manual can not be present in the same job.
  • if manual: is defined, then allow_failure will have no function in terms of "blocking".
job1:
  manual: true # `block: false` by default

job2:
  manual:
    block: true # Default is false

job3:
  manual:
    block: false # Default behavior

This page may contain information related to upcoming products, features and functionality. It is important to note that the information presented is for informational purposes only, so please do not rely on the information for purchasing or planning purposes. Just like with all projects, the items mentioned on the page are subject to change or delay, and the development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.

Edited by 🤖 GitLab Bot 🤖