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

如何在Azure CLI上传命令中嵌入存储账户密钥查询命令

解决Azure CLI上传Blob时嵌入密钥查询命令的问题

我来帮你搞定这个问题!你遇到的核心问题是命令替换的语法没对应上当前使用的shell环境——不同的shell(比如Bash、PowerShell)执行命令嵌套的规则不一样,之前的写法把密钥查询命令当成了普通字符串,所以才会报错。

下面分两种最常见的场景给你正确的写法:

1. Bash环境(Linux代理、本地Bash终端)

在Bash里,用$()来包裹需要先执行的命令,它会把命令的输出结果作为参数值传入主命令。你的上传命令应该改成这样:

az storage blob upload-batch --source "$(System.DefaultWorkingDirectory)/_ClientWeb-Build-CI/ShellArtifact/out/build" --destination "$web" --account-key $(az storage account keys list -g CustomersV2 -n $(prSourceBranchName) --query [0].value -o tsv) --account-name $(prSourceBranchName)

(注:如果是在脚本里用call前缀,保留也没问题,但通常Bash里直接执行命令不需要call)

2. PowerShell环境(Windows代理、本地PowerShell终端)

PowerShell同样用$()做命令替换,但要注意Azure DevOps变量的引用方式——需要加$env:前缀。正确写法如下:

az storage blob upload-batch --source "$(System.DefaultWorkingDirectory)/_ClientWeb-Build-CI/ShellArtifact/out/build" --destination "$web" --account-key $(az storage account keys list -g CustomersV2 -n $env:prSourceBranchName --query [0].value -o tsv) --account-name $env:prSourceBranchName

额外的安全小建议

如果是在Azure DevOps管道里执行这个操作,更推荐用Azure服务连接来替代手动传递密钥,这样既不用处理密钥的明文传递,也更符合安全最佳实践。示例管道任务如下:

- task: AzureCLI@2
  inputs:
    azureSubscription: '你的Azure服务连接名称'
    scriptType: 'bash'
    scriptLocation: 'inlineScript'
    inlineScript: |
      az storage blob upload-batch --source "$(System.DefaultWorkingDirectory)/_ClientWeb-Build-CI/ShellArtifact/out/build" --destination "$web" --account-name $(prSourceBranchName)

这个任务会自动使用服务连接的权限访问存储账户,完全不需要手动指定--account-key。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:59:31