Warm tip: This article is reproduced from serverfault.com, please click

resources-Azure DevOps:当多个项目部署到同一虚拟机时,如何管理VM代理

(resources - Azure DevOps: How to manage VM agents when multiple projects deploy to the same virtual machine)

发布于 2020-11-29 21:13:23

我正在尝试使用多阶段Azure管道,并将其部署到Windows虚拟机。由于多级管道不支持部署组,因此我正在使用环境。尽管将VM资源添加到环境与将目标添加到部署组非常相似,但是我注意到命名约定略有不同。

运行PowerShell脚本以创建作为部署组目标的代理时,创建的Windows服务名为vstsagent。{organization name}。{project name}。{target VM name}这使得Windows服务名称对于每个项目都是唯一的。

当PowerShell脚本运行以创建作为环境资源的代理时,默认情况下,所创建的Windows服务名为vstsagent。{组织名称} .. {目标VM名称}这意味着默认情况下,同一组织中部署到相同VM的所有项目都将对代理使用相同的Windows服务名称。

当我已经为项目设置了VM代理并且想要向同一组织中指向同一VM的第二个项目添加资源时,我经常遇到问题。

当PowerShell脚本在VM上运行以创建第二个代理时,它识别出服务器上已经存在具有相同名称的服务vstsagent。{organization name} .. {target VM name},并尝试替换该服务。这大约有25%的时间失败。在那种情况下,我尝试使用.\config removePowerShell手动删除现有的Windows服务,然后重新运行第二个代理的PowerShell脚本。PowerShell脚本似乎可以正常运行,并且说它已经注册了代理。但是,现在,如果我尝试在第一个项目或第二个项目中运行管道,它将失败,并显示“由于计算机处于脱机状态,因此无法部署到虚拟机'{target VM name}' ”。因此,我结束了两个无法再部署的项目。

将多个项目部署到相同的VM必须相对常见。在这种情况下,想创建第二个代理的PowerShell脚本无法替换现有代理的最佳方法是什么?有什么方法可以强制脚本仅使用现有代理而不尝试替换它?或者,在将资源添加到环境中时,在Azure DevOps GUI中,是否有某种方法可以指定我要重用另一个项目中的资源/代理?

Questioner
Simon Tewsi
Viewed
11
Levi Lu-MSFT 2020-11-30 16:18:23

我可以重现同样的问题。你可以将此问题报告给Microsoft开发团队。

当前,你可以在运行安装脚本之前手动更改代理名称,以作为解决方法。

默认情况下,代理名称设置为VM的名称--agent $env:COMPUTERNAME你可以更改dafault代理名称。例如。--agent $env:COMPUTERNAME-SecondProject见下文:

在此处输入图片说明

这将解决服务名称冲突,因为将创建新的服务名称。

在此处输入图片说明