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

标签 azure-devops resources azure-pipelines agent

我正在试验多级 Azure 管道,部署到 Windows 虚拟机。由于多阶段管道不支持我使用环境的部署组。尽管向环境添加 VM 资源与向部署组添加目标非常相似,但我注意到命名约定略有不同。
当 PowerShell 脚本运行以创建作为部署组目标的代理时,创建的 Windows 服务名为 vstsagent.{organisation name}.{project name}.{target VM name}。这使得每个项目的 Windows 服务名称都是唯一的。
当 PowerShell 脚本运行以创建作为环境资源的代理时,创建的 Windows 服务默认命名为 vstsagent.{organisation name}..{target VM name}。这意味着默认情况下,同一组织中部署到同一 VM 的所有项目都将为代理使用相同的 Windows 服务名称。
当我已经为项目设置了 VM 代理并且想要将资源添加到同一组织中指向同一 VM 的第二个项目时,我经常会遇到问题。
当 PowerShell 脚本在 VM 上运行以创建第二个代理时,它识别出服务器上已经存在同名服务 vstsagent.{organisation name}..{target VM name},并尝试替换它。这大约有 25% 的时间失败。在这种情况下,我尝试使用 .\config remove 手动删除现有的 Windows 服务。从 PowerShell,然后重新运行第二个代理的 PowerShell 脚本。 PowerShell 脚本似乎可以正常运行,并表示已注册代理。但是,现在如果我尝试在第一个或第二个项目中运行管道,它会失败,说“由于机器离线,无法部署到虚拟机‘{目标虚拟机名称}’。”。所以我最终得到了两个我无法再部署的项目。
将多个项目部署到同一个 VM 一定是比较常见的。在这种情况下,尝试创建第二个代理的 PowerShell 脚本无法替换现有代理,处理这种情况的最佳方法是什么?有没有办法强制脚本只使用现有的代理而不尝试替换它?或者,在将资源添加到环境时,在 Azure DevOps GUI 中,是否有某种方法可以指定我要重用另一个项目中的资源/代理?

最佳答案

我可以重现同样的问题。您可以 report this issue给微软开发团队。
目前,您可以在运行安装脚本之前手动更改代理名称作为解决方法。
代理名称默认设置为 VM 的名称 --agent $env:COMPUTERNAME .您可以更改 dafault 代理名称。例如。 --agent $env:COMPUTERNAME-SecondProject .见下文:
enter image description here .
这将解决服务名称冲突,因为将创建新的服务名称。
enter image description here

关于azure-devops - Azure DevOps : How to manage VM agents when multiple projects deploy to the same virtual machine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65065238/

相关文章:

azure - 在 Azure DevOps 发布管道中自动创建标签

azure-devops - 如果 Azure Pipeline 中有特定值,则忽略参数

tfs - 有没有办法让 TFS 代码搜索识别 "@"符号?

Azure DevOps : Selecting which variable group to use at the stage level

c++ - 强制资源从非 mfc 应用程序中的 dll 加载的 WTL 方式? (我们使用的是 WTL/ATL,而不是直接的 win32)

xamarin - 在 Xamarin 中使用字符串资源文件

azure-devops - 如何在不同环境中使用 Azure DevOps Pipeline 发布 ClickOnce 应用程序?

azure-devops - Azure DevOps 无法从其自己的存储库下载工件

git - 如何指定 YAML Pipeline 的保存位置?

wordpress - 如何修复WordPress中的 "508 Resource Limit is reached"错误?