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

能否在Azure DevOps YAML流水线中使用部署池?

问题描述

近期我们将Azure服务器升级至最新版本,正在重新配置项目流水线。发现新版.NET Core应用采用YAML流水线而非经典流水线,此前我们使用的是直接部署到目标机器的环境(包含部署代理)。我们希望YAML流水线能使用已配置好的部署池(经典流水线均使用该池,可实现单台机器仅运行一个部署代理,资源调度更合理),但没找到相关配置资料,怀疑YAML仅支持项目专属环境。特此询问该需求是否可行,以及如何修改现有YAML文件实现配置。

之前使用环境的YAML代码如下:

trigger:
- none

variables:
  IISWebsiteName: 'DevOpsApplications'
  IISWebApplicationName: 'TestApplication'
resources:
  pipelines:
    - pipeline: 'buildPipeline'
      project: 'TestProjectApplication'
      source: 'Build Pipeline'
      branch: trunk
 stages:
   - stage: DeployWebsite
     displayName: 'Deploy Website'
     pool:
       name: 'Default'
     jobs:
     - deployment: DeployWebsite
       displayName: 'Deploy Website'
       environment: 'THISWASTHEENVIRONMENT_BEFORECHANGE'
       strategy:
         runOnce:
           deploy:
             steps:
               - checkout: none
               - download: 'buildPipeline'
                 name: 'DownloadBuildArtifacts'
                 displayName: 'Download Build Artifacts'
                 artifact: 'TestAppArtifact'
               - task: IISWebAppManagementOnMachineGroup@0
                 name: 'StopIIS'
                 displayName: 'Stop Website'
                 inputs:
                   IISDeploymentType: 'IISWebsite'
                   ActionIISWebsite: 'StopWebsite'
                   StartStopWebsiteName: '${{ variables.IISWebsiteName }}'
               - task: IISWebAppManagementOnMachineGroup@0
                 name: 'DeployWebService'
                 displayName: 'Deploy Web Service Application'
                 inputs:
                   WebSiteName: '${{ variables.IISWebsiteName }}'
                   VirtualApplication: '${{ variables.IISWebApplicationName }}'
                   Package: '$(Pipeline.Workspace)\buildPipeline\TestApplication\TestProject'
                   TakAppOfflineFlag: true
               - task:
                 name: 'StartIIS'
                 displayName: 'Start IIS Website'
                 inputs:
                   IISDeploymentType: 'IISWebsite'
                   ActionIISWebsite: 'StartWebsite'
                   StartStopWebsiteName: '${{ variables.IISWebsiteName }}'
解决方案

该需求完全可行,YAML流水线支持直接引用已有的部署池,无需局限于项目专属环境,具体修改步骤如下:

1. 核心修改:替换environment为部署池配置

删除deployment job中的environment字段,在同一层级添加pool配置,指定你已有的部署池名称(即经典流水线使用的那个池)。同时修正原代码中StartIIS任务缺失的task类型。

2. 修改后的完整YAML代码

trigger:
- none

variables:
  IISWebsiteName: 'DevOpsApplications'
  IISWebApplicationName: 'TestApplication'
resources:
  pipelines:
    - pipeline: 'buildPipeline'
      project: 'TestProjectApplication'
      source: 'Build Pipeline'
      branch: trunk
 stages:
   - stage: DeployWebsite
     displayName: 'Deploy Website'
     # 若此Default池是阶段级通用代理池,可保留;若仅部署用,建议移至deployment层级
     # pool:
     #   name: 'Default'
     jobs:
     - deployment: DeployWebsite
       displayName: 'Deploy Website'
       # 指定你已有的部署池名称
       pool:
         name: '你的部署池名称'
       strategy:
         runOnce:
           deploy:
             steps:
               - checkout: none
               - download: 'buildPipeline'
                 name: 'DownloadBuildArtifacts'
                 displayName: 'Download Build Artifacts'
                 artifact: 'TestAppArtifact'
               - task: IISWebAppManagementOnMachineGroup@0
                 name: 'StopIIS'
                 displayName: 'Stop Website'
                 inputs:
                   IISDeploymentType: 'IISWebsite'
                   ActionIISWebsite: 'StopWebsite'
                   StartStopWebsiteName: '${{ variables.IISWebsiteName }}'
               - task: IISWebAppManagementOnMachineGroup@0
                 name: 'DeployWebService'
                 displayName: 'Deploy Web Service Application'
                 inputs:
                   WebSiteName: '${{ variables.IISWebsiteName }}'
                   VirtualApplication: '${{ variables.IISWebApplicationName }}'
                   Package: '$(Pipeline.Workspace)\buildPipeline\TestApplication\TestProject'
                   TakAppOfflineFlag: true
               - task: IISWebAppManagementOnMachineGroup@0
                 name: 'StartIIS'
                 displayName: 'Start IIS Website'
                 inputs:
                   IISDeploymentType: 'IISWebsite'
                   ActionIISWebsite: 'StartWebsite'
                   StartStopWebsiteName: '${{ variables.IISWebsiteName }}'

关键说明

  • 部署池兼容性:经典流水线使用的部署池(机器组)可以直接在YAML的deployment job中通过pool.name引用,单台机器仅运行一个代理的调度规则会自动生效,和经典流水线逻辑一致。
  • 任务适配:IISWebAppManagementOnMachineGroup@0任务本身就是为机器组(部署池)设计的,无需更换任务,只需确保部署池内的机器已正确注册代理且状态正常。
  • 阶段池 vs 部署池:原代码中stage层级的Default池是用于运行阶段内非部署任务的代理池,如果你的部署池是独立的机器组,建议只在deployment层级指定pool,避免资源调度冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:00:01