GitLab模板中定义的Inputs无法在流水线中导入显示问题排查
多层嵌套GitLab CI模板Inputs不显示问题排查与解决方案
1. 核心规则确认
GitLab CI的模板输入(spec.inputs)在多层嵌套场景下,不会自动向下传递,必须每一层模板显式声明或继承输入项,同时要严格遵循语法规范。
2. 逐文件排查与修正
.base.yml 基础模板
确保spec.inputs是文件顶级元素,且使用模板表达式引用输入值:
# .base.yml spec: inputs: RUNNER_TAG: description: "选择作业运行的Runner标签" default: "one" options: - "one" - "two" .base:config: tags: - $[[ inputs.RUNNER_TAG ]] # 必须用模板表达式$[[ ]]读取inputs # 其他通用配置(如before_script、cache等)
- 错误点:如果
spec嵌套在作业或其他键下,或用普通变量$RUNNER_TAG引用,都会导致输入失效。
second-template.yml 二级模板
必须显式暴露父模板的输入项,要么重新定义,要么使用inherit(GitLab 15.10+支持):
# second-template.yml include: - local: .base.yml # 显式声明输入项,传递给最终项目 spec: inputs: RUNNER_TAG: description: "选择作业运行的Runner标签" default: "one" options: - "one" - "two" # GitLab 15.10+可简化为:inherit: true(直接继承父模板的input定义) .second-template:config: extends: .base:config # 扩展自定义配置 .second-template:test: extends: .second-template:config script: - echo "测试作业使用Runner标签: $[[ inputs.RUNNER_TAG ]]"
- 错误点:如果二级模板未声明
spec.inputs,父模板的输入项无法传递到最终项目的流水线UI。
.gitlab-ci.yml 项目配置
导入二级模板并引用作业即可,无需重复定义输入项:
# .gitlab-ci.yml include: - local: second-template.yml test: extends: .second-template:test # 项目级自定义配置(如artifacts、rules等)
3. 额外排查点
- GitLab版本兼容性:
spec.inputs功能从14.8开始支持,多层嵌套传递需要15.10及以上版本,版本过低会直接导致输入项不显示。 - CI Lint验证:在项目CI/CD页面点击「CI Lint」,检查配置是否存在语法错误——隐性语法问题会导致输入项加载失败。
- 简化测试:先直接在项目
.gitlab-ci.yml中定义spec.inputs和作业,验证基础功能是否正常,再逐步引入模板排查层级问题。
内容的提问来源于stack exchange,提问作者A Simple Programmer
相关产品推荐
相关产品推荐

