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

如何在Azure DevOps YAML中为多阶段部署分离工件

Azure DevOps构建与部署流水线优化:工件分离+部署条件控制

一、实现分支对应的工件分离

要区分Dev和main分支生成的工件,核心是在构建阶段动态指定工件名称,确保不同分支的工件独立存储。

方案1:YAML构建流水线动态命名工件

直接在PublishBuildArtifacts任务中,通过分支变量判断生成对应名称的工件:

# 构建流水线YAML片段
steps:
  # 先完成代码编译、打包等前置步骤,将产物放到$(Build.ArtifactStagingDirectory)
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      # 根据分支名动态设置工件名称
      ArtifactName: ${{ if eq(variables['Build.SourceBranchName'], 'main') }}: App-Prod
                    ${{ else if eq(variables['Build.SourceBranchName'], 'Dev') }}: App-Dev
      publishLocation: 'Container'

方案2:用脚本动态设置工件名称变量

如果需要更复杂的分支判断逻辑,可先通过PowerShell设置变量,再引用变量发布工件:

steps:
  - powershell: |
      if ($env:BUILD_SOURCEBRANCHNAME -eq 'main') {
        Write-Host "##vso[task.setvariable variable=ArtifactName]App-Prod"
      } elseif ($env:BUILD_SOURCEBRANCHNAME -eq 'Dev') {
        Write-Host "##vso[task.setvariable variable=ArtifactName]App-Dev"
      }
    displayName: '设置工件名称变量'

  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(Build.ArtifactStagingDirectory)'
      ArtifactName: '$(ArtifactName)'
      publishLocation: 'Container'

二、为部署阶段设置执行条件

部署流水线可通过阶段条件、触发规则两种方式,控制不同环境的部署时机。

方式1:在部署流水线中设置阶段执行条件

针对不同环境的部署阶段,添加分支判断条件,确保只有对应分支的工件生成后才执行部署:

# 部署流水线YAML片段
stages:
  - stage: Deploy_Dev
    displayName: 部署开发环境
    # 仅当触发部署的构建来自Dev分支时执行
    condition: eq(variables['Build.SourceBranchName'], 'Dev')
    jobs:
      - job: Deploy
        steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: 'App-Dev' # 下载Dev分支对应的工件
              downloadPath: '$(System.ArtifactsDirectory)'
          # 后续开发环境部署步骤(如Azure App Service部署、数据库迁移等)

  - stage: Deploy_Prod
    displayName: 部署生产环境
    # 仅当触发部署的构建来自main分支时执行
    condition: eq(variables['Build.SourceBranchName'], 'main')
    jobs:
      - job: Deploy
        steps:
          - task: DownloadBuildArtifacts@0
            inputs:
              buildType: 'current'
              downloadType: 'single'
              artifactName: 'App-Prod' # 下载main分支对应的工件
              downloadPath: '$(System.ArtifactsDirectory)'
          # 后续生产环境部署步骤

方式2:通过触发规则控制部署流水线的启动

如果需要更精准的触发控制,可在部署流水线中设置仅接收指定分支的构建触发:

# 部署流水线YAML头部触发配置
resources:
  pipelines:
    - pipeline: BuildPipeline
      source: '你的构建流水线名称' # 替换为实际的构建流水线名称
      trigger:
        branches:
          include:
            - Dev # 仅Dev分支构建完成后,触发当前开发环境部署流水线
            # 若为生产环境部署流水线,此处替换为main

经典编辑器操作参考(若未使用YAML)

  1. 构建流水线设置:在「发布工件」任务中,将「工件名称」设置为App-$(Build.SourceBranchName),动态生成分支对应的工件名称。
  2. 部署流水线设置:
    • 添加部署阶段后,进入阶段的「选项」页,设置「执行条件」为「自定义条件」,输入表达式如eq(variables['Build.SourceBranchName'], 'Dev')。
    • 在「下载工件」任务中,指定对应的工件名称(如App-Dev或App-Prod)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:42:51