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

Azure DevOps管道执行az aks get-credentials报az login错误咨询

问题根因
  • AzurePowerShell@5 管道任务的内置认证逻辑,仅会自动初始化Azure Az PowerShell 模块的登录上下文,不会自动为独立的Azure CLI命令行工具(即az命令)完成身份校验。
  • 脚本前半段的Get-AzVmss、Update-AzVmss属于Az PowerShell模块的命令,可以直接复用任务自动注入的服务连接权限正常执行;后续的az aks get-credentials属于Azure CLI命令,没有有效登录上下文,因此触发Please run 'az login' to setup account报错,该问题和服务连接本身的权限配置无关。
可行解决方案

方案1:脚本内同步Az模块登录上下文给Azure CLI(最简便,无需修改管道任务配置)

在执行所有az前缀的命令前,加一行命令把当前Az模块的登录上下文同步给Azure CLI即可,修改后的脚本参考如下:

$rgName = "fdevcusaks04-rg"
$clusterName = "fdevcusaks04" 
$aksMcRg= "MC_fdevcusaks04-rg_fdevcusaks04_centralus" 
$id= "xxxxxxxxxxxxxxxxxxxxxxxxxx"

$aksNodeVmss = Get-AzVmss -ResourceGroupName "$aksMcRg"        
Update-AzVmss -ResourceGroupName $aksMcRg -Name $aksNodeVmss.Name -IdentityType UserAssigned -IdentityID $id

# 新增下行:同步当前Az登录上下文到Azure CLI
az account set --subscription (Get-AzContext).Subscription.Id

az aks get-credentials --resource-group $rgName  --name $clusterName --overwrite-existing

注意:如果运行代理上安装的Azure CLI版本低于2.30,需要先执行az login --identity再执行上述上下文切换命令;2.30以上版本可直接识别Az模块透传的身份信息。

方案2:拆分Az命令与CLI命令到独立任务(最稳定,无需手写认证逻辑)

  • 保留现有AzurePowerShell@5任务,仅运行Get-AzVmss、Update-AzVmss这类依赖Az模块的逻辑
  • 新增AzureCLI@2任务单独运行az aks get-credentials这类CLI命令,该任务会自动用配置的服务连接完成Azure CLI的登录初始化,无需手动编写登录代码。
    对应管道配置参考:
- task: AzurePowerShell@5
  displayName: '更新VMSS身份配置'
  inputs:
    azureSubscription: $(azureSubscription)
    scriptType: filePath
    scriptPath: '$(System.DefaultWorkingDirectory)/Terraform/Terraform-Scripts/update_vmss.ps1'
    azurePowerShellVersion: latestVersion

- task: AzureCLI@2
  displayName: '获取AKS集群凭证'
  inputs:
    azureSubscription: $(azureSubscription)
    scriptType: ps
    scriptLocation: inlineScript
    inlineScript: |
      az aks get-credentials --resource-group "fdevcusaks04-rg"  --name "fdevcusaks04" --overwrite-existing

方案3:脚本内手动完成Azure CLI服务主体登录(兼容性最强)

如果不想拆分任务、也不想依赖上下文自动同步逻辑,可以直接从当前Az上下文中提取服务连接的认证信息,手动完成Azure CLI登录,在执行az命令前加入如下代码即可:

$currentAzContext = Get-AzContext
$tenantId = $currentAzContext.Tenant.Id
$subscriptionId = $currentAzContext.Subscription.Id
$spId = $currentAzContext.Account.Id
$spSecret = $currentAzContext.Account.Credentials.SecretText | ConvertTo-SecureString -AsPlainText -Force
$spCredential = New-Object PSCredential($spId, $spSecret)

az login --service-principal -u $spId -p $spCredential.GetNetworkCredential().Password --tenant $tenantId
az account set --subscription $subscriptionId

该方案不受Azure CLI版本限制,所有运行环境均可正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:33:20