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

如何在Azure Pipeline中为不同分支配置不同YAML构建文件?

单条Azure DevOps流水线实现多分支不同代理池配置

你可以通过Azure Pipelines的条件表达式和内置分支变量,把两个YAML合并成一个,在单条流水线里实现不同分支自动匹配对应代理池的需求,不用维护两条流水线或者重复YAML内容。

实现思路

核心就是利用内置变量Build.SourceBranchName获取当前触发流水线的分支名,通过条件判断动态渲染pool配置,其余步骤完全复用,只需要维护一份YAML。

完整合并后的YAML示例

# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.

trigger:
- master
- iis

# 动态选择代理池:master用Azure托管代理,iis用自定义池
pool:
  ${{ if eq(variables['Build.SourceBranchName'], 'master') }}:
    vmImage: 'ubuntu-latest'
  ${{ if eq(variables['Build.SourceBranchName'], 'iis') }}:
    name: 'Default'
    vmImage: 'ubuntu-latest'

variables:
  buildConfiguration: 'Release'

steps:
  - task: AzureKeyVault@1
    inputs:
      azureSubscription: 'MySubscription'
      KeyVaultName: 'MyKeyVault'
      SecretsFilter: '*'
  - task: UseDotNet@2
    displayName: 'Install .NET Core SDK'
    inputs:
      packageType: 'sdk'
      version: '6.x'
  - task: NodeTool@0
    displayName: 'Install npm'
    inputs:
      versionSource: 'spec'
      versionSpec: '18.x'
  - task: Bash@3
    displayName: 'Install Cake.Tool'
    inputs:
      targetType: 'inline'
      script: 'dotnet tool install --global Cake.Tool | echo "Already installed"'
      workingDirectory: 'src/App/Build'
  - task: Bash@3
    displayName: 'Execute dotnet cake command'
    inputs:
      targetType: 'inline'
      script: 'dotnet cake --dockerRegistry="$(dockerRegistry)" --dockerRegistryUsername="$(dockerRegistryUsername)" --dockerRegistryPassword="$(dockerRegistryPassword)"'
      workingDirectory: 'src/App/Build'  
  - task: PublishBuildArtifacts@1
    displayName: 'Publish Build Artifacts'
    inputs:
      PathtoPublish: 'artifacts'
      ArtifactName: 'Artifact'
      publishLocation: 'Container'

关键说明

  1. 触发分支配置:trigger字段同时包含master和iis,两个分支的提交都会触发这条流水线。
  2. 动态代理池:通过${{ if eq(...) }}条件表达式,判断当前分支是master还是iis,分别加载对应的代理池配置:
    • master分支:使用Azure托管的ubuntu-latest代理
    • iis分支:使用自定义的Default代理池
  3. 复用步骤:所有构建步骤完全保留,只修改了代理池的动态逻辑,后续维护只需要改这一份YAML即可。

如果以后需要新增其他分支的特殊配置,只需要在pool块里添加对应的条件判断就行,扩展性很强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 19:55:00