首页 > 解决方案 > Azure DevOps:当多个项目部署到同一个虚拟机时如何管理 VM 代理

问题描述

我正在试验多级 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 removePowerShell 手动删除现有的 Windows 服务,然后重新运行第二个代理的 PowerShell 脚本。PowerShell 脚本似乎运行没有错误,并表示它已注册代理。但是,现在如果我尝试在第一个或第二个项目中运行管道,它会失败,说“无法部署到虚拟机'{target VM name}',因为机器处于脱机状态。 ”。因此,我最终得到了两个无法再部署的项目。

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

标签: azure-devopsresourcesazure-pipelinesagent

解决方案


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

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

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

在此处输入图像描述.

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

在此处输入图像描述


推荐阅读