【发布时间】:2019-08-15 13:36:03
【问题描述】:
我正在设置 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 已被忽略,因为它已经发生。错误 类型数据 “Microsoft.Azure.Commands.Common.Authentication.Abstractions.IAzureContextContainer”: 成员 SerializationDepth 已经存在。类型数据错误 “Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache”: 成员 PropertySerializationSet 已经存在。错误 类型数据 “Microsoft.Azure.Commands.Common.Authentication.ProtectedFileTokenCache”: 成员 SerializationMethod 已经存在。类型数据错误 “Microsoft.Azure.Commands.Common.Authentication.AuthenticationStoreTokenCache”: 成员 PropertySerializationSet 已经存在。错误 类型数据 “Microsoft.Azure.Commands.Common.Authentication.AuthenticationStoreTokenCache”: 成员 SerializationMethod 已经存在。类型数据错误 “Microsoft.Azure.Commands.Profile.Models.PSAzureContext”:成员 SerializationDepth 已经存在。类型数据错误 “Microsoft.Azure.Commands.Profile.Models.PSAzureProfile”:成员 SerializationDepth 已经存在。在 C:\程序 文件\WindowsPowerShell\Modules\AzureRm\6.13.1\AzureRM.psm1:81 char:1 + 导入模块 AzureRM.Profile -RequiredVersion 5.8.2 -Global + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [Import-Module], RuntimeException + FullyQualifiedErrorId : FormatXmlUpdateException,Microsoft.PowerShell.Commands.ImportModuleCommand
您可以在以下屏幕截图中看到这一点:
但如果先导入 AzureRm,然后再导入 Azure,它似乎可以正常工作:
问题是,在使用 Microsoft 和其他人构建的现有管道任务时,我们不控制导入的顺序。由于 MS 构建的云服务部署任务恰好首先导入 Azure,因此我们在部署云服务时遇到了失败。
最后,我尝试简单地不安装旧的 Azure 模块,希望 AzureRM “附带”处理一些服务管理 API 任务所需的东西,但事实并非如此。如果我尝试在未安装 Azure 模块的情况下进行部署,则会出现错误:
不支持基于证书的身份验证。 Azure PowerShell 找不到模块。
所以看起来遗留模块是必需的,但它发生了冲突。
【问题讨论】:
-
只需将它们分成 2 个作业,以便它们具有不同的环境吗?
-
这不是一个选项。单个 Azure DevOps Pipeline 任务引用了这两个模块 - 一个由 Microsoft 编写。
-
不确定您的意思?单个任务不能引用它们,除非它是一个脚本,在这种情况下,没有什么能阻止您在不同代理组\作业下的同一构建\发布管道中拥有 2 个脚本任务
-
有一个名为“Azure 云服务部署”的内置 ADO 任务。此任务引用 Azure 和 AzureRM 模块。执行此任务会导致我看到的错误。除非您的意思是重新编写 Microsoft 任务,否则我无法将其“分解”。如果您有兴趣,这里是任务源代码的链接。 github.com/microsoft/azure-pipelines-tasks/tree/master/Tasks/…
-
哦,我。从未使用过该任务。你可能需要在 azure powershell gh 上提出这个问题。
标签: azure azure-devops azure-powershell azure-devops-self-hosted-agent