如何在流水线中通过指定格式调用不同变量组内的同名变量
流水线多变量组层级调用实现方案
要实现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
相关产品推荐
相关产品推荐

