【问题标题】:Using Az module in Azure DevOps Release Pipeline在 Azure DevOps 发布管道中使用 Az 模块
【发布时间】:2020-09-18 17:17:58
【问题描述】:

我想在 Azure DevOps 发布管道中使用 Azure PowerShell Module(又名 Az 模块)。但是,现有的 PowerShell 选项似乎不起作用。我尝试了各种方法,但安装新的 Az 模块只会带来大量错误,包括 Az and AzureRM modules cannot be imported in the same session or used in the same script or runbook.

常规 PowerShell 任务没有内置任何 azure 模块。Azure PowerShell 任务使用 Azure RM PowerShell module,它已被淘汰(即它仍然受支持,但不会添加新功能)。

上面的错误很可能是因为当 Azure PowerShell 任务启动时,它在运行我的脚本之前执行了以下操作:

2019-01-13T13:34:14.5416432Z ==============================================================================
2019-01-13T13:34:14.5416555Z Task         : Azure PowerShell
2019-01-13T13:34:14.5416623Z Description  : Run a PowerShell script within an Azure environment
2019-01-13T13:34:14.5416705Z Version      : 3.1.18
2019-01-13T13:34:14.5416762Z Author       : Microsoft Corporation
2019-01-13T13:34:14.5416831Z Help         : [More Information](https://go.microsoft.com/fwlink/?LinkID=613749)
2019-01-13T13:34:14.5416969Z ==============================================================================
2019-01-13T13:34:20.3546127Z ##[command]Import-Module -Name C:\Modules\AzureRm_6.7.0\AzureRM\6.7.0\AzureRM.psd1 -Global
2019-01-13T13:34:58.4365259Z ##[command]Clear-AzureRmContext -Scope Process
2019-01-13T13:34:59.2732327Z ##[command]Disable-AzureRmContextAutosave -ErrorAction SilentlyContinue
2019-01-13T13:35:00.1691359Z ##[command]Add-AzureRMAccount -ServicePrincipal -Tenant *** -Credential System.Management.Automation.PSCredential -Environment AzureCloud @processScope
2019-01-13T13:35:01.5702545Z ##[command] Select-AzureRMSubscription -SubscriptionId d5eaaba3-2968-456a-98a4-e53e961fc896 -TenantId ***
2019-01-13T13:35:02.1592660Z ##[command]& 'D:\a\r1\a\ws-build\tools\install-dependencies.ps1' 

当然,在一个新项目中,我不想使用不再高级的模块创建 PowerShell 脚本。

提前想一想,即使我确实设法克服了这个问题,我也必须以某种方式使用 Azure 进行身份验证,现有的 Azure DevOps UI 为我做的,我还看不出如何使用 Az模块。

谷歌搜索似乎没有帮助,因为大多数信息仍然与已弃用的 AzureRM 模块有关。所以...总结一下。

如何在 Azure DevOps 发布管道中使用 Azure (Az) Powershell 模块?

【问题讨论】:

标签: azure-devops azure-pipelines azure-powershell


【解决方案1】:

尝试使用 Azure Powershell Task 版本 4.*(预览版)。此功能仍处于预览阶段。将此与自托管代理一起使用。这将很快为 Microsoft 托管代理发布。

参考 - https://developercommunity.visualstudio.com/content/problem/434058/unable-to-use-new-az-module-in-azure-devops.html

【讨论】:

  • 4.* 预览版现已针对托管代理发布。为我解决了问题
  • 太棒了。很高兴听到
【解决方案2】:

作为一种解决方法,我一直在使用托管 VS2017 代理池,因为它们已经准备好使用 Az 模块

【讨论】:

  • 如果您选择当前处于预览状态的 Powershell 版本 4,则此方法有效
  • 如果您想利用别名来减少初始迁移的痛苦,请在 ADO 调用的 PowerShell 脚本中使用:Enable-AzureRmAlias -Scope LocalMachine。
  • 只是扩展 @Josh 评论 Azure PowerhShell 任务的 V4 预览版具有 AZ 模块,无论托管代理版本如何
【解决方案3】:

任务依赖于特定模块。如果您想使用该任务,除了等待他们更新它之外,您无能为力。

如果您愿意,可以 fork task repository 并自行更新。或者,您可以编写自己的 Azure 身份验证逻辑。

您可以使用反向别名 (Az -> AzureRM) 来编写脚本,而不是使用 Az 模块提供的别名 (AzureRM -> Az),因此您可以使用受支持的 cmdlet 名称编写脚本,从而使自己适应未来。

【讨论】:

  • 谢谢 - 这给了我一些关于如何进行的想法。虽然我可以在我的任务中下载和安装/导入模块,但我一直没有解决身份验证方面的问题。希望我能弄清楚它在源代码中某处的当前 Azure Powershell 任务中是如何工作的。失败的反向别名可能是一个很好的权宜之计。
  • @ColinMackay FWIW,我不得不为我正在处理的 Azure 自动化中托管的一些东西做一个类似的权宜之计。 Azure 自动化也不支持 Az 模块,但需要一定程度的面向未来。
【解决方案4】:

我采取了 hack 路线,但最终创建了一个虚拟 AzureRM 模块以安装在我的自托管代理上,然后修改了我的代理上 Azure PowerShell 任务的脚本以加载 AzureRM 别名。最终结果是我在代理上安装了 Az,它们可以在 Azure PowerShell 任务的版本 3 或 4 上运行 AzureRM 样式的 cmdlet 名称和/或 Az 样式的 cmdlet 名称。这让我可以在构建代理上切换到 Az,并允许团队逐步迁移他们的脚本以使用 Az cmdlet 名称。

我的解决方案在 Github 上:https://github.com/brendonthiede/dummy-AzureRM

需要注意的是,每次更新任务时,这可能需要“重新修改”代理上的 Azure PowerShell 脚本。

【讨论】:

    【解决方案5】:

    不是每个版本的Azure Powershell Task 都有 Az 和 AzureRm 模块

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2019-04-29
      相关资源
      最近更新 更多