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

Azure Image Builder集成ADO管道时SAS URI参数传递问题

Azure DevOps管道传递SAS令牌到Azure Image Builder模板PowerShell脚本失败的解决方法

问题核心分析

当前问题源于三个关键问题:

  • AIB模板参数引用不匹配:模板定义的参数为Sasuri,但PowerShell内联脚本里引用了不存在的Fileuri参数,导致令牌无法注入。
  • JSON字符串语法错误:PowerShell命令中的双引号未在JSON模板中正确转义,引发脚本解析失败。
  • ADO参数传递的细节遗漏:敏感的SAS令牌需通过安全参数传递,同时要确保变量引用正确。

修复步骤

1. 修正AIB模板的参数引用与语法错误

修改模板中customize段的GetArchive任务,修正参数名并修复转义问题:

"customize": [
    {
        "type": "PowerShell",
        "name": "GetAzCopy",
        "inline": [
            "New-Item -Type Directory -Path 'c:\\' -Name apps",
            "invoke-webrequest -uri 'https://aka.ms/downloadazcopy-v10-windows' -OutFile 'c:\\apps\\azcopy.zip'",
            "Expand-Archive 'c:\\apps\\azcopy.zip' 'c:\\apps'",
            "copy-item 'C:\\apps\\azcopy_windows_amd64_*\\azcopy.exe' -Destination 'c:\\apps'"
        ]
    },
    {
        "type": "PowerShell",
        "name": "GetArchive",
        "inline": [
            "c:\\apps\\azcopy.exe copy \"[parameters('Sasuri')]\" c:\\apps\\AVDapps.zip",
            "Expand-Archive 'c:\\apps\\AVDapps.zip' 'c:\\apps'"
        ]
    }
]
  • 将[parameters('Fileuri')]改为[parameters('Sasuri')],匹配模板定义的参数名。
  • 用转义双引号\"包裹SAS URI参数,避免JSON解析时破坏命令结构。
  • 移除copy-item命令末尾多余的反斜杠,修正路径识别错误。

2. ADO管道中正确传递SAS令牌参数

在ADO的ARM模板部署任务中按以下配置:

  • 参数名称:填写Sasuri,与模板参数名完全一致。
  • 参数值:引用前序任务生成的SAS令牌变量,例如$(GeneratedSasUri)(替换为实际生成令牌的变量名)。
  • 标记为安全参数:勾选"Secure"选项,防止敏感令牌在管道日志中泄露。

3. 验证执行逻辑

确认AIB使用的用户托管身份具备Blob存储读取权限(辅助验证,避免SAS令牌之外的访问问题);同时检查azcopy路径是否正确,修正后的copy-item命令已将azcopy.exe直接复制到c:\apps目录,确保后续命令可正常调用。

额外注意事项

  • SAS令牌含特殊字符(如&、?)时,ADO会自动处理转义,无需手动修改令牌内容。
  • 调试阶段可临时添加PowerShell任务输出令牌变量值(调试完成后删除,避免泄露),验证变量是否正确生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:20:30