Azure devops 在Azure Powershell任务中使用Azure CLI

Azure devops 在Azure Powershell任务中使用Azure CLI,azure-devops,azure-pipelines,azure-powershell,azure-pipelines-release-pipeline,azure-cli,Azure Devops,Azure Pipelines,Azure Powershell,Azure Pipelines Release Pipeline,Azure Cli,我想创建一个Powershell脚本,它执行一些AzureRm…命令,然后执行一些Az命令。原因是某些命令只能通过Az使用 尝试在发布管道中执行这些脚本时,脚本总是失败,并出现以下错误: ERROR: Please run 'az login' to setup account. 在Azure CLI任务中执行Az命令可以正常工作,因为Az Login是由任务执行的 如果可能的话,我不想传递登录脚本所需的秘密。我宁愿退回到将脚本分为管道中的两个步骤 是否可以在Azure Powershell任

我想创建一个Powershell脚本,它执行一些
AzureRm…
命令,然后执行一些
Az
命令。原因是某些命令只能通过
Az
使用

尝试在发布管道中执行这些脚本时,脚本总是失败,并出现以下错误:

ERROR: Please run 'az login' to setup account.
Azure CLI
任务中执行
Az
命令可以正常工作,因为
Az Login
是由任务执行的

如果可能的话,我不想传递登录脚本所需的秘密。我宁愿退回到将脚本分为管道中的两个步骤

是否可以在
Azure Powershell
任务中使用
Az
命令而不手动传递机密

最简单的例子:
  • 创建一个新的发布管道
  • 添加任务
    Azure PowerShell
  • 使用内联脚本
  • 作为脚本,执行az帐户显示

无论如何,它不会那样工作,因为您必须单独向az实用程序进行身份验证。az cli和powershell不共享连接信息。在powershell步骤之前,您可以尝试在某些命令中使用az步骤。这将迫使az进行身份验证,之后您可以在powershell ste中使用它。

当我使用混合命令时,我会将其放入Azure powershell任务中

az登录--服务主体--用户名“$(ServicePrincipal)”--密码“$(AzureDevOps ServicePrincipal Secret)”--租户“$(Azure_租户)”

我将SP和租户ID作为变量,并将SP的机密存储在Azure KeyVault中,链接到库变量组。您也可以将秘密存储在普通变量/变量组中,然后点击挂锁图标以保护它


如果SP可以访问同一租户中的多个订阅,您可能需要运行
az帐户集-s$(SubscriptionName)

我已经准备好的短期解决方案是将ServicePrincipal信息传递到powershell脚本中,并手动执行
az login
(与下面Bevan的回答相同)

我的长期解决方案是用“Az Powershell”命令替换所有Azure CLI调用。 幸运的是,大多数命令现在都可用

有几个命令没有等效的commandlet。但如果它们可以通过ARM使用,您可以使用Powershell找到一个替代命令

其中许多涉及使用
New-AzResource/New-AzureRmResource
Invoke-AzResourceAction/Invoke-AzureRmResourceAction

#AzureCLI
az cosmosdb列表键
#Powershell:
$keys=调用AzResourceAction-操作列表键`
-ResourceType“Microsoft.DocumentDb/databaseAccounts”-ApiVersion“2015-04-08”`
-ResourceGroupName$ResourceGroupName-名称$accountName

哪些命令?
az cosmosdb列表键
和其他cosmos命令在我的情况下是必需的,但是
az account show
也不起作用。试试这个?我会看看,谢谢!添加了一个带有
az account show
的内嵌Azure CLI步骤,之后尝试在powershell任务中执行相同操作。。。不起作用。顺便说一句,您可以将
--debug
传递给
az
命令,以找出它在引擎盖下调用的确切API方法。然后,使用
调用AzResourceAction
复制它。