使用AzureResourceGroupDeployment覆盖参数部署云服务(扩展支持)遇JSON错误
解决Azure DevOps ARM模板部署错误:InvalidDeploymentParameterKey & TypeError
核心问题分析
出现的InvalidDeploymentParameterKey和TypeError: Cannot read properties of undefined (reading 'type')错误,主要源于以下几点:
- 参数格式不符合ARM模板解析要求(比如引号使用错误、参数值含空格未正确包裹)
- YAML中
overrideParameters的书写格式导致解析异常 - Bicep模板存在未定义的引用参数
具体修复步骤
1. 修正overrideParameters的参数格式
将带空格的参数值用双引号包裹,避免解析时被拆分;同时确保所有参数名与Bicep模板中的定义完全一致:
-servicename worker -packageSasUri "https://mystorageaccount.blob.core.windows.net/mypackage/202405181456/service.cspkg?<sas-token>" -configurationSasUri "https://mystorageaccount.blob.core.windows.net/mypackage/202405181456/ServiceConfiguration.Cloud.cscfg?<sas-token>" -location "Australia Southeast" -certificateName AccelerusLightWorker -keyVaultName worker-vault -keyVaultResourceGroup rg-worker
2. 规范YAML中overrideParameters的写法
在YAML中使用>符号来处理多行参数,确保格式正确且易读,避免换行导致的解析错误:
steps: - task: AzureResourceManagerTemplateDeployment@3 displayName: 'ARM Template deployment: Resource Group scope' inputs: azureResourceManagerConnection: netsynergy subscriptionId: 'id' resourceGroupName: 'rg-worker' location: 'Australia Southeast' csmFile: 'build/bicep/worker.bicep' overrideParameters: > -servicename worker -packageSasUri "https://mystorageaccount.blob.core.windows.net/mypackage/202405181456/service.cspkg?<sas-token>" -configurationSasUri "https://mystorageaccount.blob.core.windows.net/mypackage/202405181456/ServiceConfiguration.Cloud.cscfg?<sas-token>" -location "Australia Southeast" -certificateName AccelerusLightWorker -keyVaultName worker-vault -keyVaultResourceGroup rg-worker
注意:YAML中
location输入项也应替换为实际区域值(如Australia Southeast),避免使用占位符'location'
3. 修复Bicep模板中的未定义参数
Bicep模板中cloudService资源名称引用了suffix变量,但未定义该参数,需添加suffix参数定义:
param location string param servicename string param suffix string // 添加此参数 @secure() param packageSasUri string @secure() param configurationSasUri string param keyVaultName string param certificateName string param keyVaultResourceGroup string resource cloudService 'Microsoft.Compute/cloudServices@2020-10-01-preview' = { name: '${servicename}-worker-${suffix}' location: location tags: { DeployFromVisualStudio: 'true' } properties: { osProfile: <secret> packageUrl: packageSasUri configurationUrl: configurationSasUri upgradeMode: 'Auto' } }
并在overrideParameters中添加对应的参数值,比如-suffix "prod"
4. 验证SAS URI有效性
确保传递的packageSasUri和configurationSasUri中的SAS令牌未过期、权限正确(需包含读取权限),且URI格式无误。
内容的提问来源于stack exchange,提问作者Sundar Singh
相关产品推荐
相关产品推荐

