我正在设置 Azure DevOps 自托管管道代理。我们有一些遗留的云服务,因此我们需要以服务管理 API 为目标的“旧”Azure powershell 模块。我们显然也使用 Azure 资源管理器,因此还需要 AzureRM 或新的 Az 模块。
我们目前正在使用以下命令安装 Azure 模块版本 5.3.0 和 AzureRM 模块版本 6.13.1:
Install-Module -Name Azure -RequiredVersion 5.3.0 -AllowClobber -Scope AllUsers -Force
Install-Module -Name AzureRM -RequiredVersion 6.13.1 -AllowClobber -Scope AllUsers -Force
我们遇到的问题是,根据这些模块的导入顺序,我们会遇到脚本失败。例如,如果导入顺序是 Azure,然后是 AzureRM,我们会收到以下错误:
Import-Module:加载扩展类型数据文件时发生以下错误:TypeData“Microsoft.Azure.Commands.Common.Authentication.Abstractions.IAzureContextContainer”中的错误:TypeConverter 已被忽略,因为它已经发生。TypeData“Microsoft.Azure.Commands.Common.Authentication.Abstractions.IAzureContextContainer”中的错误:成员 SerializationDepth 已存在。TypeData“Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache”中的错误:成员 PropertySerializationSet 已存在。TypeData“Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache”中的错误:成员 SerializationMethod 已存在。TypeData 中的错误“Microsoft.Azure.Commands.Common.Authentication。
您可以在以下屏幕截图中看到这一点:
但是,如果先导入 AzureRm,然后再导入 Azure,它似乎可以正常工作:
问题是,在使用 Microsoft 和其他人构建的现有管道任务时,我们不控制导入的顺序。由于 MS 构建的云服务部署任务恰好首先导入 Azure,我们在部署云服务时遇到了失败。
最后,我尝试简单地不安装旧的 Azure 模块,希望 AzureRM “附带”处理一些服务管理 API 任务所需的东西,但事实并非如此。如果我尝试在未安装 Azure 模块的情况下进行部署,则会收到错误消息:
不支持基于证书的身份验证。找不到 Azure PowerShell 模块。
所以看起来遗留模块是必需的,但它发生了冲突。