Azure DevOps流水线ARM TTK报Location硬编码错误原因排查
问题结论
你的猜测完全正确,该报错确实是因为主模板未使用ARM TTK默认识别的主模板文件名,被判定为嵌套模板导致的。
规则说明
ARM TTK内置的Location Should Not Be Hardcoded用例对主模板和嵌套模板有两套校验逻辑:
- 主模板:允许
location参数设置[resourceGroup().location]作为默认值 - 嵌套模板:要求
location参数不能设置默认值,必须由上层主模板传入值
ARM TTK默认仅将名为azuredeploy.json、mainTemplate.json的文件识别为主模板,其余名称的ARM模板都会默认归类为嵌套/链接模板,因此你的winvm-arm.json触发了嵌套模板的校验规则,才会抛出对应的错误。
解决方案
你可以任选一种方式解决该问题:
- 修改主模板文件名为
azuredeploy.json或mainTemplate.json,适配TTK的默认识别规则 - 若要保留现有文件名,在Azure DevOps的ARM TTK任务配置中,找到「主模板文件名」配置项,手动填入
winvm-arm.json,明确告知TTK该文件为主模板 - 如果是通过命令行运行ARM TTK,执行时添加参数
-MainTemplateFiles winvm-arm.json即可
内容的提问来源于stack exchange,提问作者Pallab
相关产品推荐
相关产品推荐

