user5580578
user5580578

Reputation: 1334

Gitlab-CI: Define rules globally and overwrite them locally in a stage

Is it possible to globally define the rules for when the stages should be executed? And only if these are different that they are defined in the respective stage as in my example?

[gitlab-ci.yml]

linter1:
  rules:
  - if: '$CI_PIPELINE_SOURCE == "push"'
    when: always
  - when: never

linter2:
  rules:
  - if: '$CI_PIPELINE_SOURCE == "push"'
    when: always
  - when: never

validate:
  rules:
  - if: '$CI_PIPELINE_SOURCE == "web"'
    when: on_success
  - when: never

deploy:
  rules:
  - if: '$CI_PIPELINE_SOURCE == "web"'
    when: on_success
  - when: never

Upvotes: 9

Views: 10501

Answers (1)

Romain TAILLANDIER
Romain TAILLANDIER

Reputation: 1995

Did you try extends keyword ?

https://docs.gitlab.com/ee/ci/yaml/#extends If you add a rule property it will replace the one from extends property.

   .linter-common:
      rules:
      - if: '$CI_PIPELINE_SOURCE == "push"'
        when: always
      - when: never
    

    .validate-rule:
      rules:
        - if: '$CI_PIPELINE_SOURCE == "web"'
          when: on_success
        - when: never

    linter1:
      extends: .linter-common
    
    linter2:
      extends: .linter-common
    
    
    validate:
          extends: .validate-rule

    
    deploy:
           extends: .validate-rule

Upvotes: 15

Related Questions