GitLab CI中如何在!reference标签内使用变量?
问题原因
GitLab CI的!reference标签是在配置解析阶段就被处理的,而你定义的USED_TEMPLATE_NAME变量要到流水线运行阶段才会被替换成实际值。解析时$USED_TEMPLATE_NAME还只是字符串本身,不是.setup,所以GitLab找不到对应的引用结构,才会报错。
解决方案
根据你的需求,有几种可行的替代办法:
方案1:直接写死模板名(最简单)
如果模板名称不需要动态切换,直接把.setup写到!reference里即可:
include: - local: configs.yml test: script: - !reference [.setup, script] - echo running my own command
方案2:用extends继承模板
要是你想复用整个模板的配置,再追加自定义命令,可以用extends:
include: - local: configs.yml test: extends: .setup script: - !reference [.setup, script] - echo running my own command
如果需要覆盖模板原有的script,直接写新命令即可,无需引用原脚本。
方案3:动态切换模板(适合参数化场景)
如果确实要根据变量选择不同模板,可以结合rules和多任务实现:
include: - local: configs.yml test-setup: rules: - if: $USED_TEMPLATE_NAME == ".setup" script: - !reference [.setup, script] - echo running my own command test-another-setup: rules: - if: $USED_TEMPLATE_NAME == ".another-setup" script: - !reference [.another-setup, script] - echo running my own command
运行流水线时,通过传递USED_TEMPLATE_NAME=.setup这类变量,就能触发对应的任务。
内容的提问来源于stack exchange,提问作者Sandman
相关产品推荐
相关产品推荐

