能否在GitLab CI/CD中使用外部YAML文件中的锚点?
问题原因
GitLab CI中,YAML别名(&定义、*引用)的作用域仅局限于单个文件,跨include引入的外部文件无法识别这些别名,所以会出现Unknown alias: run_on_main_branch错误。
解决方案
有两种可行的替代方式来复用外部模板中的规则:
方式一:用隐藏Job模板 + extends
修改外部模板文件 generic.yml,把别名定义改成普通的隐藏Job(以.开头):
# my-own-gitlab.com/templates/-/blob/main/generic.yml ... .run_on_main_branch: rules: - if: ($CI_COMMIT_REF_NAME == "main") when: on_success .deploy: image: nginx ...
然后在项目的 .gitlab-ci.yml 中,通过extends同时引用部署模板和规则模板:
include: - project: 'templates' ref: 'main' file: 'generic.yml' deploy_dev: environment: name: dev extends: - .deploy - .run_on_main_branch
方式二:用!reference直接引用规则
如果只想复用规则部分,不需要整合成Job模板,可以在外部模板中单独定义规则块:
# my-own-gitlab.com/templates/-/blob/main/generic.yml ... .run_on_main_branch_rules: rules: - if: ($CI_COMMIT_REF_NAME == "main") when: on_success .deploy: image: nginx ...
然后在项目CI文件中,用!reference直接引用该规则:
include: - project: 'templates' ref: 'main' file: 'generic.yml' deploy_dev: environment: name: dev rules: !reference [.run_on_main_branch_rules, rules] extends: .deploy
内容的提问来源于stack exchange,提问作者Syafiq Kamarul Azman
相关产品推荐
相关产品推荐

