eemilk
eemilk

Reputation: 1638

Gitlab CI job running on new tag despite rules say run only on master

I have a job in a pipeline as such:

msi_build:
  stage: Build
  script:
    - cd project_name
    - ls -a
    - wine python setup.py bdist_msi
  rules:
    - if: '$CI_COMMIT_REF_NAME == $BUILD_BRANCH'
    - changes:
      - /*.{py, html, css, yml, json}
  tags:
    - pywine
  artifacts:
    when: on_success
    paths:
      - /builds/$CI_PROJECT_PATH/project_name/dist/*.msi
    expire_in: 1 yrs

But this also runs when I tag a commit and push it in another branch.

enter image description here

BUILD_BRANCH is master. This won't run when only pushing normal commits to other branches. And it'll run when pushing to master. But for some reason unknown to me, it also runs on tagged commits. What is the cause?

If it matters I used: git push --atomic origin <branch name> <tag> when pushing to another branch.

Upvotes: 0

Views: 1258

Answers (1)

KamilCuk
KamilCuk

Reputation: 141891

  rules:
    - if: '$CI_COMMIT_REF_NAME == $BUILD_BRANCH'
    - changes:
      - /*.{py, html, css, yml, json}

is not

  rules:
    - if: '$CI_COMMIT_REF_NAME == $BUILD_BRANCH'
      changes:
      - /*.{py, html, css, yml, json}

The first one runs when $CI_COMMIT_REF_NAME == $BUILD_BRANCH OR when the files were changed. The second one runs the job when that and that is equal AND the files with extensions were changed. Most probably in the commit the tag is run for the files with those extensions were changed, so the command is run, ignoring the first condition, because it's "or".

It's a good idea to add when: on_success to rules: explicitly, so it's nicely visible.

Upvotes: 1

Related Questions