Search code examples
gitlabcontinuous-integrationgitlab-cicontinuous-deploymentcicd

GitLab jobs:build config key may not be used with `rules`: only


I have a GitLab CI job that I want to only run for tags or for two special branches (develop, main).

only:
  - develop
  - main
  - tags

This job has a dynamic variable that I set using the rules feature:

variables:
  IMAGE_TAG: $CI_COMMIT_TAG # defaults to the pushed commit tag name
rules:
  - if: $CI_COMMIT_REF_NAME == 'develop'
    variables:
      IMAGE_TAG: 'develop'
  - if: $CI_COMMIT_REF_NAME == 'main'
    variables:
      IMAGE_TAG: 'main'

The linter gives me this error though:

jobs:build config key may not be used with rules: only

I looked around and it looks like you can't use rules together with only.

If I remove the only directive, then this job will also run on any branch. How do I adjust my script so that I can set the variable dynamically but also limit the job to only run on tags and certain branches?


Solution

  • The equivalent rules: to this would be:

    rules:
      - if: $CI_COMMIT_BRANCH == "develop"
        # ... insert `variables:` here if you want...
      - if: $CI_COMMIT_BRANCH == "main"
        # ...
      - if: $CI_COMMIT_TAG
    

    In this case, you also don't need to set your IMAGE_TAG variable conditionally. You can just use $CI_COMMIT_REF_NAME which will be equal to $CI_COMMIT_BRANCH for branch pipelines or $CI_COMMIT_TAG for tag pipelines.