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

Azure DevOps使用专用ScaleSet出现主机名冲突的解决方案咨询

可行解决方案

Azure DevOps Scale Set代理池要求每个节点的唯一标识符(包含主机名、代理ID)全局唯一,你遇到的重复主机名导致的代理被判定为不健康是典型场景,并非仅支持通用化镜像部署的Scale Set,有两类可落地的解决方案:

方案1:修复自定义脚本扩展的主机名修改逻辑(无需重制镜像)

之前脚本未生效大概率是未处理执行顺序和重启逻辑,按以下规则配置即可生效:

  • 调整VMSS扩展的执行顺序,在扩展的provisionAfterExtensions属性中声明:自定义脚本扩展最先执行,Azure DevOps代理扩展在自定义脚本执行完成后再运行。
  • 脚本内容需包含唯一主机名生成+强制重启逻辑,Windows下可参考以下PowerShell代码(Windows主机名限制为15字符以内):
# 调用Azure实例元数据接口获取当前VM唯一ID,拼接前缀生成唯一主机名
$prefix = "ado-agent"
$vmShortId = (Invoke-RestMethod -Headers @{"Metadata"="true"} -Uri "http://169.254.169.254/metadata/instance/compute/vmId?api-version=2021-02-01&format=text" -UseBasicParsing).Substring(0,8)
$newHostname = "$prefix-$vmShortId"
Rename-Computer -NewName $newHostname -Force -Restart
  • 自定义脚本扩展的commandToExecute参数配置为powershell.exe -ExecutionPolicy Unrestricted -File 你的脚本文件名.ps1,同时关闭enableAutomaticUpgrade避免脚本重复执行。
  • 实例重启后,Azure DevOps代理扩展会自动读取新的唯一主机名完成注册,不会再出现ID冲突导致的下线问题。

方案2:将专用镜像转换为通用化镜像(推荐,长期稳定)

专用镜像本身保留了原系统的SID、主机名等固定标识,原生不适合多实例部署,转为通用化镜像后Azure会自动为每个实例生成唯一主机名、SID,从根源避免冲突:

  • 用现有专用镜像创建一台临时Windows 10 VM,启动后以管理员身份运行系统准备工具:C:\Windows\System32\Sysprep\sysprep.exe
  • 选项选择「进入系统全新体验(OOBE)」,勾选「通用」,关机选项选择「关机」,等待工具执行完成后VM会自动关闭。
  • 在Azure门户中对该已关机的VM执行「捕获」操作,勾选「自动删除在创建映像后虚拟机」,生成通用化托管镜像。
  • 用新的通用化镜像重建VMSS即可,Azure会自动为每个实例分配唯一主机名,无需额外配置脚本。

Azure DevOps并未限制仅支持通用化镜像的Scale Set,只要保证每个实例的主机名、代理ID唯一即可正常运行,两种方案都可以解决你遇到的代理随机终止问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:42:03