AzureRmWebAppDeployment@4部署Linux应用计划时URL不匹配报错
问题原因及修复方案
问题原因
- ARM模板配置缺陷:创建部署槽时未正确关联主应用的Linux运行时配置,或手动覆盖了
hostNames属性,导致槽的SCM(Kudu)站点未被自动创建,进而使带.scm后缀的URL返回404。 - DevOps任务参数不匹配:
AzureRmWebAppDeployment@4任务中appName、slotName或resourceGroupName与实际资源信息不一致,导致任务构造了错误的SCM URL。
最优修复方案
1. 修正ARM模板的部署槽配置
确保模板中部署槽的配置正确继承主应用的Linux属性,且未手动干预主机名生成:
{ "type": "Microsoft.Web/sites/slots", "apiVersion": "2022-03-01", "name": "[concat(parameters('webAppName'), '/staging')]", "location": "[parameters('location')]", "dependsOn": [ "[resourceId('Microsoft.Web/sites', parameters('webAppName'))]" ], "properties": { "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]", "siteConfig": { "linuxFxVersion": "[parameters('linuxFxVersion')]" } } }
- 不要添加
hostNames字段,避免覆盖默认生成的SCM主机名。 - 确认
serverFarmId指向的是Linux应用计划,且linuxFxVersion与主应用一致。
2. 调整Azure DevOps任务参数
确保任务参数与实际资源完全匹配,显式指定槽名称:
- task: AzureRmWebAppDeployment@4 displayName: 'Deploy to Staging Slot' inputs: azureSubscription: '<你的Azure服务连接名称>' appType: 'webAppLinux' WebAppName: '<主Web应用名称>' slotName: 'staging' packageForLinux: '$(Build.ArtifactStagingDirectory)/**/*.zip'
若仍存在问题,可添加额外参数强制指定槽:
AdditionalArguments: '--slot staging'
3. 验证SCM站点状态
用Azure CLI检查槽的主机名列表,确认SCM站点已创建:
az webapp deployment slot show --name <主应用名称> --slot staging --resource-group <资源组名称> --query 'hostNames'
返回结果中若包含<主应用名称>-staging.scm.azurewebsites.net,说明SCM站点正常,只需调整任务参数;若未包含,需重新部署修复后的ARM模板。
内容的提问来源于stack exchange,提问作者Mykola
相关产品推荐
相关产品推荐

