Azure VMSS虚拟机加入VSTS部署组及相关技术问题问询
关于Azure VMSS与VSTS部署组的几个问题解答
1. 能否将VMSS中的虚拟机加入VSTS部署组?
完全可以!你有两种主流实现方式:
- 自定义脚本扩展:在VMSS的配置中添加自定义脚本扩展,当新实例启动时自动下载并执行VSTS代理的安装和注册脚本,将实例加入指定的部署组。
- Azure DevOps内置支持:Azure DevOps本身就支持将VMSS作为代理池,但如果是部署组场景,自定义脚本扩展更灵活,能精准控制实例加入的部署组。
2. 用已加入部署组的VM做镜像创建VMSS,代理认证是否正常?
直接用已注册好代理的VM做镜像不推荐,核心问题出在PAT和代理标识上:
- 每个VSTS代理都有唯一的
agentId和注册信息,镜像中的代理配置会带着旧的标识,新实例启动后会和VSTS服务器产生冲突(比如出现重复的代理名称)。 - PAT是和特定用户/权限绑定的,而且有过期时间,镜像里的PAT一旦过期,新实例的代理就无法正常连接VSTS。
正确的做法是:
- 镜像中只预装VSTS代理的安装包,但不要执行注册步骤。
- 在VMSS的启动脚本中动态完成代理注册:
- 从Azure Key Vault(推荐,更安全)中获取有效的PAT。
- 用VM的实例ID或主机名作为代理的唯一名称(比如
agent-vmss-${instanceId})。 - 执行注册命令加入部署组,示例命令:
./config.sh --unattended --agent "$(hostname)" --url "https://dev.azure.com/your-org" --auth pat --token "$PAT_TOKEN" --pool "your-deployment-group" --work "_work"
3. 横向扩展时如何让新VM获取最新构建?
有两种靠谱的方案:
- 触发部署组重新部署:当VMSS横向扩展后,手动或自动触发Azure DevOps中部署组的部署任务,选择“部署到所有目标”,新加入的实例会自动接收最新的构建版本。你也可以在部署组的设置中开启“自动部署到新实例”(部分场景支持)。
- 启动脚本中拉取最新构建:在VM启动的自定义脚本里,完成代理注册后,直接从Azure DevOps的构建工件库中拉取最新的构建包,执行本地部署脚本。这种方式能让实例启动后立即拥有最新版本,无需等待部署任务触发。
内容的提问来源于stack exchange,提问作者smoyer
相关产品推荐
相关产品推荐

