在Azure DevOps的发布流水线中使用Az模块

10
我希望在Azure DevOps发布管道中使用Azure PowerShell Module(也称为Az模块)。然而,现有的PowerShell选项似乎无法正常工作。我尝试了各种方法,但安装新的Az模块只会引起大量错误,包括Az和AzureRM模块不能在同一会话中导入或在同一脚本或运行簿中使用。 常规的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模块实现这一点。将订阅添加到Azure上下文中 谷歌搜索似乎没有帮助,因为大多数信息仍然涉及已弃用的AzureRM模块。所以...总之。
我如何在Azure DevOps发布管道中使用Azure(Az)PowerShell模块?

即将推出。根据 GitHub 评论,Az 模块将在2019年2月发布:https://github.com/Microsoft/azure-pipelines-tasks/issues/9201#issuecomment-451820964 - Colin Mackay
1
我尝试在Azure DevOps中使用Az模块进行操作。我在这里写了一篇简短的文章 - https://medium.com/@harioverhere/using-az-powershell-modules-with-azure-devops-17924e6143ba - Hari Subramaniam
5个回答

5

1
4.* 预览版现已发布,适用于托管代理。为我解决了问题。 - Jeff
1
太棒了。很高兴听到这个消息。 - Divyanshu mehta

3

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


5
如果你选择目前处于预览阶段的PowerShell 4版本,这将起作用。 - Josh
如果您想利用别名来使初始迁移更加轻松,请在ADO调用的PowerShell脚本中使用:Enable-AzureRmAlias -Scope LocalMachine。 - Ben Dyer
只是在扩展@Josh的评论中,Azure PowerShell任务的V4预览具有AZ模块,无论托管代理版本如何。 - Jeff

1
这个任务依赖于一个特定的模块。如果你想使用这个任务,除了等待更新之外,你什么也做不了。
如果你愿意,你可以复制任务存储库并自行更新它。或者你可以编写自己的Azure身份验证逻辑。
你可以使用反向别名(Az->AzureRM)编写脚本,而不是使用Az模块提供的别名(AzureRM->Az),这样你就可以使用将来支持的cmdlet名称编写脚本,从而使自己具备未来的兼容性。

谢谢 - 这给了我一些想法来继续。虽然我可以在我的任务中下载、安装和导入模块,但身份验证方面一直困扰着我。希望我能在当前的Azure Powershell任务源代码中找到它是如何工作的。如果失败,反向别名可能是一个不错的权宜之计。 - Colin Mackay
@ColinMackay,顺便说一下,我不得不为一些托管在Azure Automation中的东西做出类似的权宜之计。 Azure Automation目前还不支持Az模块,但有一定程度的未来保障需求。 - Daniel Mann

1
我采用了一个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脚本。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接