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

如何在Azure Pipelines中从上游CI流水线资源获取变量与参数值

解决方案

Azure DevOps默认不会将上游流水线的自定义参数、变量直接暴露给下游触发的流水线,你需要先在CI流水线中将需要传递的值导出,再在CD流水线中读取即可,具体操作步骤如下:

第一步:修改CI流水线,导出需要传递的参数和变量

在你原有CI流水线的所有执行步骤末尾,新增以下两个步骤,将environment参数和version变量标记为可跨流水线读取的输出变量,同时写入配置文件作为构建产物上传兜底:

# 你原有的CI流水线参数、变量、构建步骤均保持不变,在末尾追加以下内容
steps:
  # 原有所有构建步骤放在此处,下方是新增的导出步骤
  - task: PowerShell@2
    displayName: '导出需要传递给CD的参数变量'
    name: exportVars
    inputs:
      targetType: 'inline'
      script: |
        # 写入配置文件
        $config = @{
          environment = "${{ parameters.environment }}"
          version = "$(version)"
        }
        $config | ConvertTo-Json | Out-File -FilePath "$(Build.ArtifactStagingDirectory)/pipeline-config.json" -Encoding utf8
        # 标记为跨流水线输出变量
        Write-Host "##vso[task.setvariable variable=outputEnvironment;isOutput=true]${{ parameters.environment }}"
        Write-Host "##vso[task.setvariable variable=outputVersion;isOutput=true]$(version)"

  - task: PublishBuildArtifacts@1
    displayName: '上传流水线配置产物'
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)/pipeline-config.json'
      ArtifactName: 'pipeline-config'
      publishLocation: 'Container'

第二步:修改CD流水线读取值

两种读取方式二选一即可,第二种读配置文件的方式兼容性更强,不受流水线变量作用域限制:

方式1:直接读取上游输出变量

在CD流水线中新增变量块引用CI的输出变量:

resources:
  pipelines:
  - pipeline: web-ci
    source: PoC-Web-CI
    trigger:
     branches: 
      include:
        - cicd/azure-pipelines
        - develop

# 新增变量块,引用CI导出的输出变量
variables:
  cdEnvironment: $[ resources.pipeline.web-ci.outputs['exportVars.outputEnvironment'] ]
  cdVersion: $[ resources.pipeline.web-ci.outputs['exportVars.outputVersion'] ]

stages:
- stage: 'Package_Deploy'
  jobs:
  - deployment: 'Deploy_to_Server'
    environment: 'PoC-Web.PoC_WEB_SERVER'
    strategy:
      rolling:
        deploy:
          steps:
          - task: CmdLine@2
            inputs:
              script: |              
                echo "Fetching CI Pipeline Environment Variables"
                echo "Pipeline-ID: $(resources.pipeline.web-ci.pipelineID)"
                echo "Source-Commit: $(resources.pipeline.web-ci.sourceCommit)"
                echo "Version: $(cdVersion)"
                echo "environment: $(cdEnvironment)"

提示:如果导出变量的步骤在CI的独立Job中,需要把引用路径加上Job名称,格式为$[ resources.pipeline.web-ci.outputs['Job名.exportVars.outputEnvironment'] ]

方式2:读取CI上传的配置文件

stages:
- stage: 'Package_Deploy'
  jobs:
  - deployment: 'Deploy_to_Server'
    environment: 'PoC-Web.PoC_WEB_SERVER'
    strategy:
      rolling:
        deploy:
          steps:
          # 先下载CI上传的配置产物
          - task: DownloadBuildArtifacts@1
            inputs:
              buildType: 'specific'
              project: '你的DevOps项目名称'
              definition: 'PoC-Web-CI'
              buildVersionToDownload: 'latest'
              downloadType: 'single'
              artifactName: 'pipeline-config'
              downloadPath: '$(System.ArtifactsDirectory)'
          - task: PowerShell@2
            displayName: '读取CI传递的配置'
            inputs:
              targetType: 'inline'
              script: |
                $config = Get-Content "$(System.ArtifactsDirectory)/pipeline-config/pipeline-config.json" | ConvertFrom-Json
                Write-Host "##vso[task.setvariable variable=cdEnvironment]$($config.environment)"
                Write-Host "##vso[task.setvariable variable=cdVersion]$($config.version)"
          - task: CmdLine@2
            inputs:
              script: |              
                echo "Fetching CI Pipeline Environment Variables"
                echo "Pipeline-ID: $(resources.pipeline.web-ci.pipelineID)"
                echo "Source-Commit: $(resources.pipeline.web-ci.sourceCommit)"
                echo "Version: $(cdVersion)"
                echo "environment: $(cdEnvironment)"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:36:02