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

Azure DevOps Pipelines:如何强制Stage在VMSS同一实例运行?

强制Azure DevOps Pipeline Stage在同一VMSS实例上运行

可以通过代理标识传递+需求匹配的方式实现,无需重构现有Job。核心思路是让Stage内的第一个Job锁定当前运行的VMSS实例,然后让后续所有Job强制匹配该实例。

具体实现步骤

1. 在Stage的首个Job中捕获当前代理实例标识

利用Azure DevOps代理的环境变量(比如AGENT_MACHINE_NAME,默认VMSS实例的机器名是唯一的),将其设置为可传递的输出变量,供后续Job使用。

2. 后续Job通过demands匹配目标实例

在Stage内的所有后续Job中,通过pool.demands指定必须运行在首个Job锁定的实例上。

YAML配置示例

stages:
- stage: StickyVMSSStage
  variables:
    # 用于存储目标代理实例名称
    targetAgent: ''
  jobs:
  - job: LockAgentInstance
    pool:
      name: YourVMSSAgentPoolName  # 替换为你的VMSS代理池名称
    steps:
    # 捕获当前代理实例名称,设置为输出变量
    - script: echo "##vso[task.setvariable variable=targetAgent;isOutput=true;]$env:AGENT_MACHINE_NAME"
      name: setAgentVariable
    - script: echo "已锁定VMSS实例: $(setAgentVariable.targetAgent)"

  # 后续Job1,强制匹配锁定的实例
  - job: SubsequentJob1
    dependsOn: LockAgentInstance
    pool:
      name: YourVMSSAgentPoolName
      demands:
        # 匹配首个Job锁定的代理名称
        - Agent.Name -equals $(LockAgentInstance.setAgentVariable.targetAgent)
    steps:
    - script: echo "当前运行实例: $env:AGENT_MACHINE_NAME"

  # 后续Job2,同样匹配锁定的实例
  - job: SubsequentJob2
    dependsOn: LockAgentInstance
    pool:
      name: YourVMSSAgentPoolName
      demands:
        - Agent.Name -equals $(LockAgentInstance.setAgentVariable.targetAgent)
    steps:
    - script: echo "当前运行实例: $env:AGENT_MACHINE_NAME"

注意事项

  • 实例唯一性:确保VMSS代理池中的每个实例都有唯一的Agent.Name(默认VMSS创建的实例名称是唯一的,格式通常为vmss-{pool-name}-{instance-id})。
  • 实例可用性风险:如果锁定的VMSS实例在后续Job等待期间被自动缩放回收、更新或故障,后续Job会因找不到匹配代理而失败。可以考虑给VMSS设置实例保留策略,或在Pipeline中添加重试逻辑。
  • 替代方案:临时标签:如果不想依赖Agent.Name,也可以在首个Job中给当前代理添加临时标签,后续Job匹配该标签。示例:
    # 首个Job添加临时标签
    - script: echo "##vso[agent.addtag]sticky-stage-$(Build.BuildId)"
    # 后续Job的demands
    demands:
      - sticky-stage-$(Build.BuildId) -equals true
    
    注意:添加代理标签需要代理池的管理权限,且建议在Stage结束后清理标签(通过##vso[agent.removetag]命令)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:24:21