Github Actions部署ARM模板时JSON参数被替换的问题
问题根源
Github Actions默认使用的bash shell会将{}识别为通配符或命令替换的特殊标记,直接传递JSON字符串时会被错误解析,最终导致参数异常。
可靠解决方法
方法1:通过临时文件传递参数(推荐)
将Tags的JSON内容写入临时文件,使用@文件名的方式传递给az命令,完全避免命令行转义问题:
- name: 部署ARM模板 run: | # 将Tags JSON写入临时文件 echo '{"key1": "value1", "key2": "value2", "key3": "value3"}' > tags-params.json # 执行部署命令,引用参数文件 az deployment group create \ --resource-group <你的资源组名称> \ --template-file ./path/to/your/template.json \ --parameters @tags-params.json
方法2:正确转义JSON字符串中的特殊字符
如果不想用文件传递,需要对JSON中的{}和双引号进行转义,确保bash不会解析这些特殊字符:
- name: 部署ARM模板 run: | az deployment group create \ --resource-group <你的资源组名称> \ --template-file ./path/to/your/template.json \ --parameters resourceTags='\{\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"\}'
方法3:使用环境变量+双引号包裹
通过环境变量存储JSON字符串,在az命令中用双引号包裹变量,避免shell解析特殊字符:
- name: 部署ARM模板 env: RESOURCE_TAGS: '{"key1": "value1", "key2": "value2", "key3": "value3"}' run: | az deployment group create \ --resource-group <你的资源组名称> \ --template-file ./path/to/your/template.json \ --parameters resourceTags="$RESOURCE_TAGS"
验证模板参数定义
确保ARM模板中resourceTags参数的类型正确定义为object:
"parameters": { "resourceTags": { "type": "object", "metadata": { "description": "资源标签集合" } } }
内容的提问来源于stack exchange,提问作者Unnamed
相关产品推荐
相关产品推荐

