从 Azure DevOps 管道中,我需要登录到 AZCOPY,然后将一些文件从 DevOps 工作目录复制到 Azure 存储帐户。
创建服务连接(自动、工作负载身份联合)。作为服务连接的一部分创建的应用程序注册,在存储帐户中赋予了存储 Blob 数据贡献者角色。
使用以下代码执行 AZCOPY 登录,但失败并出现错误,
trigger:
batch: false
branches:
include:
- dev
pool:
vmImage: ubuntu-latest
steps:
- task: AzureCLI@2
inputs:
addSpnToEnvironment: true
azureSubscription: 'DevOps_connect'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# Inherit Azure CLI service connection
export ARM_CLIENT_ID=$servicePrincipalId
export ARM_OIDC_TOKEN=$idToken
export ARM_TENANT_ID=$tenantId
echo "ARM_CLIENT_ID: $ARM_CLIENT_ID"
echo "ARM_OIDC_TOKEN: $ARM_OIDC_TOKEN"
echo "ARM_TENANT_ID: $ARM_TENANT_ID"
azcopy login --identity
执行登录命令失败: ManagedIdentityCredential:无法验证系统分配的身份。端点响应 {"error":"invalid_request","error_description":"找不到身份"}
为什么失败,我缺少任何设置或环境变量吗?我在 DevOps 中使用管道代理。
考虑使用
AZCOPY_AUTO_LOGIN_TYPE
环境变量,它提供了在不使用 azcopy login
命令的情况下进行授权的能力:
steps:
- task: AzureCLI@2
inputs:
addSpnToEnvironment: true
azureSubscription: 'DevOps_connect'
scriptType: bash
scriptLocation: inlineScript
inlineScript: |
# ...
env:
AZCOPY_AUTO_LOGIN_TYPE: AZCLI
# other environment variables
参见: