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

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

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

当 PowerShell 脚本 运行s 创建作为部署组目标的代理时,创建的 Windows 服务被命名为 vstsagent。{组织名称} .{项目名称}.{目标虚拟机名称}。这使得每个项目的 Windows 服务名称都是唯一的。

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

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

当 VM 上的 PowerShell 脚本 运行s 创建第二个代理时,它识别出已经有同名的服务,vstsagent.{organisation name}..{target服务器上的虚拟机名称},并尝试替换它。这大约有 25% 的时间失败。在那种情况下,我尝试使用 PowerShell 中的 .\config remove 手动删除现有的 Windows 服务,然后重新 运行 第二个代理的 PowerShell 脚本。 PowerShell 脚本显示 运行 没有错误,并表示它已注册代理。但是,现在如果我尝试 运行 第一个或第二个项目中的管道失败,显示“无法部署到虚拟机‘{target VM name}’,因为机器处于脱机状态.”。所以我最终得到了两个我无法再部署的项目。

将多个项目部署到同一个虚拟机一定是比较常见的。处理这种情况的最佳方法是什么,在这种情况下,PowerShell 脚本试图创建第二个代理无法替换现有代理?有没有办法强制脚本只使用现有代理而不尝试替换它?或者,在向环境添加资源时,在 Azure DevOps GUI 中,是否有某种方法可以指定我想重用另一个项目中的 resource/agent?

我可以重现同样的问题。您可以report this issue到微软开发团队。

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

代理名称默认设置为虚拟机的名称--agent $env:COMPUTERNAME。您可以更改默认代理名称。例如。 --agent $env:COMPUTERNAME-SecondProject。见下文:

.

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