在Azure DevOps发布管道中使用Az模块

时间:2019-01-13 14:48:56

标签: azure-devops azure-powershell

我想在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模块。AzurePowerShell任务使用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来做到这一点。模块。 Add a subscription into the Azure context

Google搜索似乎没有帮助,因为大多数信息仍然与不推荐使用的AzureRM模块相关。所以...总而言之。

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

5 个答案:

答案 0 :(得分:1)

任务与特定模块有关。如果要使用任务,除了等待他们更新它之外,您无能为力。

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

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

答案 1 :(得分:0)

作为一种解决方法,我一直在使用Hosted VS2017代理程序池,因为这些已使Az模块准备好使用

答案 2 :(得分:0)

我采取了黑客途径,但最终创建了一个虚拟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脚本。

答案 3 :(得分:0)

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

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

enter image description here

答案 4 :(得分:0)

并非Azure Powershell Task的每个版本都具有Az和AzureRm模块

enter image description here