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

如何利用$(Build.DefinitionName)动态获取流水线对应环境变量值

动态获取流水线对应环境变量的解决方案

我们正尝试集中管理环境变量,流水线名称为"mytap-test",现有模板文件如下:

vars.yaml 模板

variables:
- name: mytap-test
  value: 22

原始 pipeline.yaml 模板

trigger: none

resources:
  repositories:
    - repository: Templates
      type: git
      name: DevSecOps/DevSecOps

variables:
- template: UTAP/Library/vars.yaml@Templates

stages:
  - stage: pull_image
    pool:
      name: LinuxJavaCIBuildAgents
    jobs:
      - job: pull_image
        workspace:
          clean: all
        steps:
        - script: |
            echo "##vso[task.setvariable variable=docker_version;]$(mytap-test)"
            echo ${docker_version}
          displayName: get version

需求是:不再依赖静态变量名$(mytap-test),而是通过$(Build.DefinitionName)获取流水线名称,动态匹配vars.yaml中对应变量的值,最终让echo ${docker_version}返回22。

解决方案

利用Bash的变量间接引用语法${!var_name}实现动态取值,修改pipeline.yaml中的script步骤即可:

修改后的 pipeline.yaml(核心部分)

stages:
  - stage: pull_image
    pool:
      name: LinuxJavaCIBuildAgents
    jobs:
      - job: pull_image
        workspace:
          clean: all
        steps:
        - script: |
            # 捕获流水线名称
            PIPELINE_NAME=$(Build.DefinitionName)
            # 间接引用对应流水线的变量值
            VERSION_VALUE=${!PIPELINE_NAME}
            # 设置docker_version变量
            echo "##vso[task.setvariable variable=docker_version;]$VERSION_VALUE"
            # 验证输出
            echo ${docker_version}
          displayName: get version

原理说明

  1. PIPELINE_NAME=$(Build.DefinitionName):将当前流水线名称(如"mytap-test")赋值给本地变量PIPELINE_NAME;
  2. ${!PIPELINE_NAME}:Bash的间接引用语法,会把PIPELINE_NAME的取值(即"mytap-test")当作变量名,取出对应的值(也就是vars.yaml中定义的22);
  3. 后续步骤和原始逻辑一致,将获取到的版本值赋值给docker_version并验证输出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 12:07:14