You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipelines中AZ CLI Task登录失败问题求助

问题原因与解决步骤

核心问题

  1. AzureCLI@2任务无需手动执行az login:该任务会自动通过你配置的服务连接(ADO)完成身份验证,手动调用az login会覆盖自动认证逻辑,触发交互式设备码登录流程。
  2. Bash@3任务未继承认证上下文:Pipeline中每个任务是独立进程,默认不会共享前序任务的Azure认证状态。

解决方法

方法一:将脚本逻辑整合到AzureCLI@2任务中

直接利用AzureCLI@2的认证上下文执行脚本,无需额外处理登录:

trigger:
- none

pool:
  vmImage: ubuntu-latest

steps:

- task: AzureCLI@2
  displayName: '执行远程状态脚本'
  inputs:
      azureSubscription: 'ADO'
      scriptLocation: 'scriptPath'
      scriptType: 'bash'
      scriptPath: '$(System.DefaultWorkingDirectory)/Terraform/remotestate.sh'
      workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform/'

方法二:传递认证变量给Bash@3任务

如果必须拆分任务,可通过环境变量传递服务主体认证信息:

trigger:
- none

pool:
  vmImage: ubuntu-latest

steps:

- task: AzureCLI@2
  displayName: '导出认证凭据'
  inputs:
      addSpnToEnvironment: true
      azureSubscription: 'ADO'
      scriptLocation: 'inlineScript'
      scriptType: 'bash'
      inlineScript: |
        az --version

- task: Bash@3
  inputs:
    filePath: '$(System.DefaultWorkingDirectory)/Terraform/remotestate.sh'
    workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform/'
    failOnStderr: true
  env:
    ARM_CLIENT_ID: $(servicePrincipalId)
    ARM_CLIENT_SECRET: $(servicePrincipalKey)
    ARM_TENANT_ID: $(tenantId)
    ARM_SUBSCRIPTION_ID: $(subscriptionId)

同时在remotestate.sh开头添加认证命令:

az login --service-principal -u $ARM_CLIENT_ID -p $ARM_CLIENT_SECRET --tenant $ARM_TENANT_ID
az account set --subscription $ARM_SUBSCRIPTION_ID

关键注意事项

  • 确认服务连接ADO拥有足够权限:至少需要Contributor角色以创建资源组、存储账户和容器。
  • 绝对不要在AzureCLI@2任务中手动执行az login,这会破坏自动认证流程。

内容的提问来源于stack exchange,提问作者Vegas588

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:40:30