rules

Conditionally include or exclude a job from a pipeline.

Supported: if, changes, exists, when, allow_failure, needs, variables, interruptible

Examples

Condition on variable

job:
  script: echo "job"
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH

Condition on file changes

job:
  script: echo "job"
  rules:
    - changes:
        - src/**/*.rb
        - Gemfile.lock

Condition on file existence

job:
  script: echo "job"
  rules:
    - exists:
        - Dockerfile

Set when

job:
  script: echo "job"
  rules:
    - when: on_success

Allow failure via rules

job:
  script: echo "job"
  rules:
    - allow_failure: true

Set variables via rules

job:
  script: echo "job"
  rules:
    - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
      variables:
        DEPLOY_ENV: production
    - variables:
        DEPLOY_ENV: staging

Set interruptible via rules

job:
  script: echo "job"
  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"
      interruptible: true
    - interruptible: false

Add needs via rules

build:
  stage: build
  script: echo "build"

test:
  stage: test
  script: echo "test"
  rules:
    - needs:
        - build