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

如何在.gitlab-ci.yml的variables配置中定义和使用数组变量?

GitLab CI/CD 使用数组变量的可行方案

GitLab CI/CD 的 variables 字段原生仅支持字符串类型值,不支持直接定义 YAML 数组,也不支持带方括号的数组风格变量名,这是你之前两种写法报错的根本原因。可通过以下两种变通方案实现数组能力:

方案1:分隔符拼接字符串(简单场景首选)

将数组元素用统一的分隔符拼接为单个字符串存入变量,执行脚本时再转换为 bash 数组。

基础用法(元素无空格)

variables:
  # 用空格拼接所有数组元素
  MY_ARRAY: "abc dcef"

test_job:
  script:
    - arr=($MY_ARRAY)
    - echo ${arr[0]} # 输出 abc
    - echo ${arr[1]} # 输出 dcef

兼容带空格的元素

如果数组元素包含空格,可换用其他不会出现在元素中的分隔符(如 |)配合 IFS 转换:

variables:
  # 用|作为分隔符
  MY_ARRAY: "abc|dcef|hello world"

test_job:
  script:
    - IFS="|" read -ra arr <<< "$MY_ARRAY"
    - echo ${arr[2]} # 输出 hello world

方案2:JSON字符串存储(复杂场景适用)

如果元素包含大量特殊字符,可存储为标准 JSON 数组字符串,配合 jq 工具解析转换为 bash 数组,兼容性更强:

variables:
  # 存储标准JSON数组字符串
  MY_ARRAY_JSON: '["abc", "dcef", "hello world", "test@#$%"]'

test_job:
  script:
    - mapfile -t arr < <(echo "$MY_ARRAY_JSON" | jq -r '.[]')
    - echo ${arr[3]} # 输出 test@#$%

注意:使用该方案需要确保 GitLab Runner 执行环境已安装 jq 工具。

之前写法报错原因

  • 直接写 YAML 数组作为变量值:GitLab CI 要求 variables 是键值对结构,值只能是字符串或嵌套哈希,不支持数组类型,因此触发 Lint 校验报错。
  • 用 arr[0] 作为变量名:GitLab 会将完整的 arr[0] 作为环境变量名导出,而 bash 不允许环境变量名包含方括号,因此触发导出阶段报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:04