Azure Web App Github Action部署Jar包到App Service遇到400错误怎么办?

摘要:问题描述 通过github aciton部署azure app service服务的时候,遇见400报错。 报错信息非常简单: Starting deployment for web app...Package deployment usi
问题描述 通过github aciton部署azure app service服务的时候,遇见400报错。 报错信息非常简单: Starting deployment for web app... Package deployment using OneDeploy initiated. Error: Failed to deploy web package to App Service. Error: Deployment Failed, Error: Failed to deploy web package using OneDeploy to App Service. Bad Request (CODE: 400) 这个问题应该如何调查呢? 问题解答 在Github Aciton中,使用 Azure WebApp(azure/webapps-deploy@v3)来部署App Service的应用, 这次部署的是一个jar包。 Github Action 脚本: - name: Azure WebApp uses: azure/webapps-deploy@v3 with: app-name: '<app service name>' package: ${{ github.workspace }}/target/*.jar 查看Azure文档,介绍部署java应用时,使用az cli命令,github action和maven 插件都是使用的Kudu OneDeploy接口( https://<your web app>.scm.chinacloudsites.cn/api/publish?type=jar ) (文档链接:https://docs.azure.cn/zh-cn/app-service/configure-language-java-deploy-run?tabs=linux&pivots=java-tomcat#deploying-your-app) 根据以上信息,就尝试使用az webapp deploy命令直接部署jar包应用,发现多了一句错误提示信息: > az webapp deploy --resource-group <your resource group name> --name <your app service name> --src-path myjava.jar --type jar Initiating deployment Deploying from local path: myjava.jar An error occurred during deployment. Status Code: 400, Details: "Artifact type = 'Jar' cannot be deployed to stack = 'TOMCAT'. Site should be configured to run with stack = JAVA", Please visit https://XXXXXXXXX.scm.chinacloudsites.cn/api/deployments/latest to get more information about your deployment 这句错误消息非常关键(Artifact type = 'Jar' cannot be deployed to stack = 'TOMCAT'. Site should be configured to run with stack = JAVA")。 在查看App Service的配置信息后,Stack果然设置为Tomcat。 因为这里只有两种选项( Tomcat 和Java SE )。于是,修改为Java SE后,再次部署jar包。 成功。 当问题解决后,想进一步验证是否是one deploy接口对jar包的强制限制。 恰好kudu也是开源项目,所以,进入github kudu 仓库 (源码:https://github.com/projectkudu/kudu/tree/master ),使用错误消息关键字整库搜索“cannot be deployed to stack”,最终,定位到 PushDeploymentController.cs 中,有如下的验证条件: 当部署的文件为Jar时,需要判断目标App Service的Stack只能是JavaSE。
阅读全文