Search code examples
bashgitlabgitlab-cidotenv

GitLab CI - Trigger the job based on pattern match in the rules from dotenv variables of an other job


I have two jobs in the Gitlab CI file.

  1. First job env_var_test generates the dotenv variables from the command.

    echo '{"apple":red,"boy":"bar","cat":"white"}' | jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]'

  2. Second job env_var_retrive_test looks for a variable from env_var_test dotenv variables and if the variable match the predefined value of the CICD rules, it triggers


env_var_test:
  stage: build
  image: $CFIMAGE
  script:
    - echo '{"apple":red,"boy":"bar","cat":"white"}' | jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' > deploy.env
  artifacts:
    reports:
      dotenv: deploy.env
  tags:
    - linux

env_var_retrive_test:
  stage: deploy
  image: $CFIMAGE
  script:
    - echo "[ $apple - $boy - $cat ]"
  tags:
    - linux
  rules:
    - if: '$boy == "bar"'
      when: always

With this setup, I tested them and could see the variables are correctly printing echo "[ $apple - $boy - $cat ]". However, the job was not triggering if I defined the variables in the rules section

  rules:
    - if: '$boy == "bar"'
      when: always

Please correct me if I'm doing it wrong or help me with any better approach to do the same.

-Thanks


Solution

  • https://docs.gitlab.com/ee/ci/yaml/#rules

    You cannot use dotenv variables created in job scripts in rules, because rules are evaluated before any jobs run.

    Feature request: https://gitlab.com/gitlab-org/gitlab/-/issues/235812. Please vote for it.