ACR Task运行报错无法反序列化任务,是否为Base64格式问题?
ACR Task反序列化失败问题排查与解决
你的问题根源在于错误地直接将acr purge命令转为Base64作为encodedTaskContent,EncodedTask类型要求的是符合ACR Task规范的YAML任务定义的Base64编码,而非单一命令的转码,Azure无法将纯命令的Base64字符串反序列化为合法的Task对象,因此抛出错误。
正确的解决步骤:
编写ACR Task的YAML定义文件
创建一个如purge-task.yaml的文件,内容需包含任务版本、执行步骤(指定acr-cli镜像和purge命令):version: v1.1.0 steps: - cmd: acr purge --filter 'imagename:.*' --ago 1d --untagged --dry-run image: mcr.microsoft.com/acr/acr-cli:latest注:
mcr.microsoft.com/acr/acr-cli:latest是包含acr purge工具的官方镜像,必须指定。将YAML文件转为Base64编码
- Linux/macOS环境执行:
base64 -w 0 purge-task.yaml - Windows PowerShell环境执行:
[Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes((Get-Content -Path .\purge-task.yaml -Raw)))
- Linux/macOS环境执行:
更新Bicep中的ACR Task定义
将生成的正确Base64字符串填入encodedTaskContent,同时设置encodedValuesContent为空字符串(无自定义变量时):resource acrTask 'Microsoft.ContainerRegistry/registries/tasks@2023-01-01-preview' = { parent: acrRegistry // 替换为你的ACR资源引用 name: 'purge_image' identity: { type: 'SystemAssigned' } properties: { platform: { os: 'Linux' architecture: 'amd64' } taskType: 'EncodedTask' encodedTaskContent: 'YOUR_BASE64_ENCODED_YAML_CONTENT' encodedValuesContent: '' status: 'Enabled' } }重新部署并测试任务
部署更新后的Bicep资源,再执行az acr task run -n purge_image -r registryname即可正常运行。
内容的提问来源于stack exchange,提问作者prvn
相关产品推荐
相关产品推荐

