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

如何在流水线中通过指定格式调用不同变量组内的同名变量

流水线多变量组层级调用实现方案

要实现groupa.var2格式的指定变量组内变量调用,核心是将变量组定义为嵌套的映射(字典/对象)结构,不同主流流水线工具的实现方式如下:

Jenkins 实现

Jenkins的声明式/脚本式流水线原生支持Map结构的变量定义,直接声明即可使用点语法访问:

// 提前定义变量组
def groupa = [var1: "a1_val", var2: "a2_val"]
def groupb = [var1: "b1_val", var2: "b2_val"]

pipeline {
    agent any
    stages {
        stage("调用测试") {
            steps {
                echo "groupa.var2值为:${groupa.var2}"
                echo "groupb.var1值为:${groupb.var1}"
            }
        }
    }
}

如果需要将变量组配置为全局参数,可选择JSON类型参数,流水线中解析后同样支持点语法访问。

GitLab CI 实现

GitLab CI支持YAML原生的嵌套结构,直接在variables块中定义对象格式的变量组即可:

# 定义嵌套变量组
variables:
  groupa:
    var1: "a1_val"
    var2: "a2_val"
  groupb:
    var1: "b1_val"
    var2: "b2_val"

test_job:
  script:
    - echo "groupa.var2值为:$groupa.var2"
    - echo "groupb.var1值为:$groupb.var1"

低版本GitLab如果不支持直接嵌套变量,可将变量组定义为JSON字符串,执行阶段用jq工具解析取值,效果一致。

GitHub Actions 实现

GitHub Actions可将变量组定义为JSON格式的环境变量,执行阶段解析后调用:

env:
  groupa: '{"var1": "a1_val", "var2": "a2_val"}'
  groupb: '{"var1": "b1_val", "var2": "b2_val"}'

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: 变量组调用测试
        run: |
          A_VAR2=$(echo '${{ env.groupa }}' | jq -r '.var2')
          echo "groupa.var2值为:$A_VAR2"
          B_VAR1=$(echo '${{ env.groupb }}' | jq -r '.var1')
          echo "groupb.var1值为:$B_VAR1"

使用可复用工作流时,也可直接声明对象类型的输入参数,直接用点语法访问对应属性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:01