You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GitLab CI中定义列表或映射(复杂对象)类型变量

GitLab CI 定义复杂对象/列表类型变量的正确方式

GitLab CI 的 variables 字段对变量值的类型有严格限制:只能是字符串,或者用于配置变量属性的简单哈希(比如带value和description的结构),直接写对象、数组都会触发语法错误。

你的两种写法为什么报错

  • 写法一:GitLab 会把缩进的sourceProjectId当成新的变量键,而非JOB_RUN_PARAMETERS_LIST的值,所以报"invalid data keys"错误。
  • 写法二:变量值不能是数组类型,GitLab 明确要求变量值只能是字符串或指定哈希结构,因此触发"variable definition must be either a string or a hash"错误。

正确实现方式:序列化字符串传递

把复杂对象/列表序列化为JSON字符串,在Job脚本中再解析成对应结构使用。

1. 定义对象类型变量

dev-trigger-deployment:
    variables:
        # 把对象转成JSON字符串,注意用单引号包裹避免YAML解析问题
        JOB_RUN_PARAMETERS_LIST: '{"sourceProjectId": "my_project_id", "env": "dev"}'
    script:
        # 用jq工具解析JSON(需确保runner环境安装了jq)
        - PROJECT_ID=$(echo "$JOB_RUN_PARAMETERS_LIST" | jq -r '.sourceProjectId')
        - echo "目标项目ID:$PROJECT_ID"

2. 定义列表类型变量

dev-trigger-deployment:
    variables:
        # 数组转JSON字符串
        JOB_RUN_PARAMETERS_LIST: '[{"sourceProjectId": "proj_1"}, {"sourceProjectId": "proj_2"}]'
    script:
        # 遍历数组提取每个元素的sourceProjectId
        - echo "$JOB_RUN_PARAMETERS_LIST" | jq -r '.[].sourceProjectId'

备选方案:拆分多个简单变量

如果不需要传递完整结构,也可以拆成多个独立变量:

dev-trigger-deployment:
    variables:
        SOURCE_PROJECT_ID: "my_project_id"
        DEPLOY_ENV: "dev"
    script:
        - echo "项目ID:$SOURCE_PROJECT_ID,环境:$DEPLOY_ENV"

内容的提问来源于stack exchange,提问作者sg_rs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:25:04