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

Azure Pipeline中AzurePowerShell@5拉取ACR中Bicep模块失败排查

问题原因及解决方案

核心原因

  1. AzurePowerShell@5任务的凭据隔离
    AzurePowerShell@5任务会自动通过服务连接登录Az模块,但这个登录上下文仅对PowerShell中的Az命令生效。Bicep拉取私有ACR模块时,依赖ChainedTokenCredential从环境中获取凭据,而PowerShell的Az上下文不会自动注入到Bicep可识别的环境变量或凭据缓存中,导致ChainedTokenCredential无法找到有效凭据。

  2. 无效的登录命令
    你尝试的Connect-AzContainerRegistry是用于管理ACR的PowerShell命令,和Bicep拉取模块的OCI镜像拉取逻辑无关;az acr login是给Docker客户端授权的命令,同样无法为Bicep的模块拉取提供有效凭据。

  3. 服务连接权限的潜在问题
    虽然配置了AcrPull角色,仍需确认服务连接对应的服务主体,是否被正确授予了目标ACR的AcrPull权限(作用范围需覆盖ACR本身),且权限已生效。

解决方案

方案1:在AzurePowerShell@5中注入凭据到环境变量

通过PowerShell获取服务连接的访问令牌,设置为Bicep可识别的环境变量,让ChainedTokenCredential能读取到:

# 获取Azure资源管理的访问令牌(Bicep拉取ACR模块依赖此资源范围)
$accessToken = Get-AzAccessToken -ResourceUrl "https://management.azure.com/" -TenantId $env:AZURE_TENANT_ID
# 设置环境变量,Bicep会自动读取此令牌
$env:AZURE_ACCESS_TOKEN = $accessToken.Token

# 执行Bicep部署命令
New-AzResourceGroupDeployment -ResourceGroupName "你的资源组名称" -TemplateFile "./main.bicep"

方案2:改用AzureCLI@2任务

AzureCLI@2任务会自动通过服务连接完成登录,且CLI的凭据会被ChainedTokenCredential识别,直接执行部署命令即可:

az deployment group create --resource-group 你的资源组名称 --template-file ./main.bicep

额外验证步骤

  • 确认Bicep模块的引用格式正确:br:你的ACR名称.azurecr.io/bicep/modules/模块名:版本号
  • 检查服务主体的AcrPull权限:在ACR的"访问控制(IAM)"中,确认服务主体的角色分配存在且作用范围正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 10:12:35