自托管Azure DevOps代理报错:找不到名为'AzureCloud'的环境
故障现象
同一台虚拟机上部署的Azure DevOps代理池节点执行Azure PowerShell部署任务时报错,同服务连接下其他虚拟机代理运行正常,在问题虚拟机本地手动执行对应命令可成功,卸载重装Azure PowerShell模块后故障未消除,核心报错日志如下:
2022-06-13T11:07:24.5665998Z ##[command]"C:\Program Files\PowerShell\7\pwsh.exe" -NoLogo -NoProfile -NonInteractive -ExecutionPolicy Unrestricted -Command ". 'D:\Agent\02\_work\_temp\3c5c143c-117b-4adb-9c90-7043632edfa0.ps1'" 2022-06-13T11:07:26.0076950Z Added TLS 1.2 in session. 2022-06-13T11:07:26.1347095Z ##[command]Import-Module -Name C:\Program Files\PowerShell\Modules\Az.Accounts\2.8.0\Az.Accounts.psd1 -Global 2022-06-13T11:07:26.8410918Z ##[command]Clear-AzContext -Scope CurrentUser -Force -ErrorAction SilentlyContinue 2022-06-13T11:07:27.4110901Z ##[command]Clear-AzContext -Scope Process 2022-06-13T11:07:27.4789914Z ##[command]Connect-AzAccount -ServicePrincipal -Tenant {{Redacted}} -Credential System.Management.Automation.PSCredential -Environment AzureCloud @processScope 2022-06-13T11:07:27.5295739Z ##[error]Unable to find environment with name 'AzureCloud' 2022-06-13T11:07:27.6855841Z ##[error]There was an error with the service principal used for the deployment. 2022-06-13T11:07:27.7936958Z ##[error]PowerShell exited with code '1'. 2022-06-13T11:07:29.5169529Z ##[command]Disconnect-AzAccount -Scope Process -ErrorAction Stop 2022-06-13T11:07:29.9206643Z ##[command]Clear-AzContext -Scope Process -ErrorAction Stop
故障定位
该报错核心触发原因是代理服务的运行上下文和手动执行命令的用户上下文不一致,导致Az.Accounts模块加载时无法读取内置的AzureCloud环境定义,和服务主体权限、Az模块安装包本身的完整性无关,因此重装Az模块、同服务连接跨机器运行、本地手动执行命令都不会复现故障。
修复步骤
- 优先调整代理服务运行账号:Azure DevOps代理如果以服务模式部署,默认使用
NETWORK SERVICE或本地系统账号运行,这类账号的用户配置文件、PowerShell模块搜索路径、环境变量加载逻辑和手动登录VM使用的用户账号完全隔离。将代理服务的运行账号修改为手动执行命令能成功的本地管理员账号,重启代理服务后重跑流水线,绝大多数场景下故障会直接恢复。 - 如果调整服务账号后仍报错,执行以下缓存清理与冲突排查操作:
- 停止该虚拟机上所有运行中的Azure DevOps代理进程
- 定位代理服务账号对应的用户目录,删除路径下的Az模块缓存文件夹:
C:\Users\<代理服务账号名>\AppData\Roaming\Windows Azure PowershellC:\Users\<代理服务账号名>\.Azure
- 执行命令
Get-Module -ListAvailable Az.Accounts枚举所有已安装的Az.Accounts版本,卸载所有非2.8.0的残留版本(和日志中加载的模块版本保持一致),避免多版本模块并存导致的加载冲突 - 给代理服务账号授予Az模块安装目录
C:\Program Files\PowerShell\Modules\的完全读取权限,排除权限拦截导致的环境定义读取失败 - 重启代理服务后重跑任务
- 修复验证:可以在流水线中新增前置PowerShell步骤,执行
Get-AzEnvironment,如果返回结果中包含AzureCloud条目,说明环境定义加载正常,后续服务主体连接逻辑不会再触发该报错。
内容的提问来源于stack exchange,提问作者paddingtonMike
相关产品推荐
相关产品推荐

