Rules for includes behave differently if defined in .gitlab-ci.yml directly vs. in a included template
I am applying rules to select which ci-templates to include. I see a different behavior if I define the rules in the .gitlab-ci.yml directly vs. in an included template.
For example in a project named ci-import-example, available at https://gitlab.com/cadami-public/ci-import-example/ I use the following .gitlab-ci.yml
include: - remote: 'https://gitlab.com/cadami-public/ci-import-example/-/raw/main/job_A.yml' rules: - if: $CI_PROJECT_NAME == "ci-import-example" when: always - remote: 'https://gitlab.com/cadami-public/ci-import-example/-/raw/main/job_B.yml' rules: - if: $CI_PROJECT_NAME != "ci-import-example" when: always direct_job_A: stage: build script: - env | sort rules: - if: $CI_PROJECT_NAME == "ci-import-example" when: always direct_job_B: stage: build script: - env | sort rules: - if: $CI_PROJECT_NAME != "ci-import-example" when: always
with job_A.yml as
imported_job_A: stage: .post script: - env | sort
and job_B.yml as
imported_job_B: stage: .post script: - env | sort
As expected, direct_job_A and imported_job_A are scheduled.
If I move the .gitlab-ci.yml to template-gitlab-ci.yml and include the template, such that .gitlab-ci.yml now is
include: - remote: 'https://gitlab.com/cadami-public/ci-import-example/-/raw/import-ci-file/template-gitlab-ci.yml'
then direct_job_A and imported_job_B are scheduled. I did expect that again direct_job_A and imported_job_A would be scheduled.
I have verified that the variable I am using can be used with include Use CI/CD configuration from other files | GitLab