Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

GitLab CI, rules not triggering job

Tags:

gitlab-ci

We just started using GitLab and have some problems with the behaviour. Standing on branch: feature/test, I would expect ALL of the jobs below to be triggered, but only All Branches except master/dev is triggered.

Anyone know what I'm doing wrong?

Reading the documentation here: https://docs.gitlab.com/13.8/ee/ci/yaml/#rules

stages:
  - pre-build
  - build
  - post-build
  - test
  - publish
  - deploy

All Branches except master/dev:
  stage: build
  image: openjdk:16-slim
  script:
    - 'cd .tools'
  rules:
    - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
      when: never
    - if: '$GIT_COMMIT_BRANCH =~ /^dev.*/'
      when: never
    - when: always

Only Branch Regex:
  stage: build
  image: openjdk:16-slim
  script:
    - 'cd .tools'
  rules:
    - if: '$GIT_COMMIT_BRANCH =~ /^feature.*/'

Only Branch Specific:
  stage: build
  image: openjdk:16-slim
  script:
    - 'cd .tools'
  rules:
    - if: '$GIT_COMMIT_BRANCH == "feature/test"'
like image 304
Kenneth Gunnerud Avatar asked Nov 05 '25 08:11

Kenneth Gunnerud


1 Answers

The variable you're using doesn't exist: $GIT_COMMIT_BRANCH, or at least it isn't defined by Gitlab CI, so you'd have to be defining it yourself somewhere, which I don't see in the yaml file. I think you want to use CI_COMMIT_BRANCH, which is predefined by Gitlab, and contains the name of the branch that is being built.

The reason your jobs aren't running correctly is since the variable doesn't exist, the conditionals are evaluating as 'false', so the last two jobs will never run, and the "All branches except master/dev" will run for all except your default branch due to the second conditional. The first conditional, checking if the branch is the default branch, works fine. The second one evaluates as false since the variable doesn't exist, so it falls to the third rules line: when: always.

You should be able to fix it by changing the variable name. However, note that CI_COMMIT_BRANCH doesn't always exist. If a pipeline was started from a merge request, this variable will be empty. Also, if you use tags in your development workflow, this will be empty. The CI_COMMIT_REF_NAME variable on the other hand will hold the branch or tag name of the item being built, and will exist if a Merge Request started the pipeline. In that case, it holds the value of CI_MERGE_REQUEST_SOURCE_BRANCH_NAME (they're equivalent).

But, if you don't use tags and either don't use Merge Requests or handle those pipelines separately, CI_COMMIT_BRANCH will work fine.

like image 182
Adam Marshall Avatar answered Nov 07 '25 15:11

Adam Marshall



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!