【Azure Web App】Github Action部署Jar包到App Service报400错误

简介: 通过GitHub Action部署Azure App Service时遇400错误,根源在于Jar包无法部署至Stack为Tomcat的应用。需将App Service运行栈改为Java SE,并可通过az CLI或curl复现验证。最终确认Kudu源码中对部署类型有严格校验。

问题描述

通过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。如果不是,返回400的状态码

 

附录一:使用 curl 命令直接调用接口也可以复现问题,效果和az webapp deploy命令相同

curl -X POST \
     -u user:password \
     -T "/Users/Downloads/xxxxx-0.0.1-SNAPSHOT.jar" \
     "https://xxxxx.scm.chinacloudsites.cn/api/publish?type=jar" \
     -v
* Host xxxxx.scm.chinacloudsites.cn:443 was resolved.
* IPv6: (none)
* IPv4: 159.27.20.0
*   Trying 159.27.20.0:443...
* Connected to xxxxx.scm.chinacloudsites.cn (159.27.20.0) port 443
* ALPN: curl offers h2,http/1.1
* (304) (OUT), TLS handshake, Client hello (1):
*  CAfile: /etc/ssl/cert.pem
*  CApath: none
* (304) (IN), TLS handshake, Server hello (2):
* (304) (OUT), TLS handshake, Client hello (1):
* (304) (IN), TLS handshake, Server hello (2):
* (304) (IN), TLS handshake, Unknown (8):
* (304) (IN), TLS handshake, Certificate (11):
* (304) (IN), TLS handshake, CERT verify (15):
* (304) (IN), TLS handshake, Finished (20):
* (304) (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / AEAD-AES256-GCM-SHA384 / [blank] / UNDEF
* ALPN: server accepted http/1.1
* Server certificate:
*  subject: C=CN; ST=Shanghai; O=Shanghai Blue Cloud Technology Co., Ltd.; CN=*.chinacloudsites.cn
*  start date: Dec 19 00:00:00 2025 GMT
*  expire date: Jun 17 23:59:59 2026 GMT
*  subjectAltName: host "xxxxx.scm.chinacloudsites.cn" matched cert's "*.scm.chinacloudsites.cn"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert Basic RSA CN CA G2
*  SSL certificate verify ok.
* using HTTP/1.x
* Server auth using Basic with user 'deploypoc'
> POST /api/publish?type=jar HTTP/1.1
> Host: xxxxx.scm.chinacloudsites.cn
> Authorization: Basic xxxxxxxxxxxxxxxx
> User-Agent: curl/8.7.1
> Accept: */*
> Content-Length: 25578166
> Expect: 100-continue
> 
* Done waiting for 100-continue
< HTTP/1.1 400 Bad Request
< Content-Type: text/plain; charset=utf-8
< Date: Wed, 31 Dec 2025 03:42:36 GMT
< Server: Kestrel
< Set-Cookie: ARRAffinity=xxxx;Path=/;HttpOnly;Secure;Domain=xxxxx.scm.chinacloudsites.cn
< Set-Cookie: ARRAffinitySameSite=xxxxx;Path=/;HttpOnly;SameSite=None;Secure;Domain=xxxxx.scm.chinacloudsites.cn
< Transfer-Encoding: chunked
< 
* HTTP error before end of send, stop sending
* abort upload after having sent 589824 bytes
* Closing connection
Artifact type = 'Jar' cannot be deployed to stack = 'TOMCAT'. Site should be configured to run with stack = JAVA%

 

参考资料

App Service部署Java应用:https://docs.azure.cn/zh-cn/app-service/configure-language-java-deploy-run?tabs=linux&pivots=java-tomcat#deploying-your-app

Kudu One Deploy Source Code : https://github.com/projectkudu/kudu/blob/master/Kudu.Services/Deployment/PushDeploymentController.cs#L304

 



当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!

相关文章
|
2天前
|
机器学习/深度学习 人工智能 算法
基于深度学习YOLO12的汽车损伤检测系统
针对汽车损伤检测效率低、主观性强等问题,本研究基于YOLOv12提出自动化检测系统,融合区域注意力与R-ELAN网络,提升小损伤识别精度与多场景适应性,实现快速、精准、标准化评估,推动保险、二手车等产业智能化升级。
|
7天前
|
供应链 容器
什么是code128码?
Code 128码是一种高密度条形码,支持全ASCII字符,广泛用于物流、运输和供应链管理。它分为A、B、C三个子集,可编码字母、数字及控制符,具有高密度、小空间优势,适用于复杂数据编码需求。
271 3
|
3天前
|
人工智能 安全 API
Nacos 安全护栏:MCP、Agent、配置全维防护,重塑 AI Registry 安全边界
Nacos安全新标杆:精细鉴权、无感灰度、全量审计!
|
11天前
|
人工智能 监控 Cloud Native
云原生AI赋能文旅数智化转型:玄晶引擎AI数字员工落地长白山康养项目全解析
本文以长白山大健康企业为例,介绍其通过玄晶引擎云原生AI数字员工实现“养生+文旅”模式智能化升级的实践。涵盖技术架构、运营适配、营销创新与落地经验,展现AI在内容生产、客服转化、B端获客等环节的全链路赋能,助力企业收益率提升47%、团队扩张35%,为文旅产业数智化转型提供可复用范本。
98 12
|
24天前
|
存储 弹性计算 固态存储
阿里云服务器租用价格:实例配置、带宽、云盘收费标准与云服务器活动价格参考
对于初次选购阿里云服务器的用户而言,云服务器的收费标准与活动价格是大家最为关注的问题,而在实际选购中,通常都是选择2核4G、4核8G、8核16G,2核8G、4核16G、8核32G,2核16G、4核32G、8核64G这些热门配置。本文为大家整理了阿里云服务器的收费模式,实例与配置收费标准,带宽与云盘收费标准,以及2核4G、4核8G、2核8G、4核16G、8核32G,2核16G等热门配置当下活动价格情况,以供大家参考。
226 20
|
1天前
|
弹性计算 固态存储 大数据
2026年阿里云服务器活动,云服务器租用价格多少钱一年?
2026年阿里云服务器活动,云服务器租用价格多少钱一年?2026年阿里云服务器租用价格表已更新:轻量2核2G轻量服务器一年68元,折合5.6元1个月,新老用户同享99元一年服务器,2核4G5M服务器ECS优惠价199元一年(企业专享),2核4G4M轻量服务器298元一年,4核8G服务器955元一年,4核16G10M服务器70元1个月、210元3个月,8核32G服务器160元1个月、480元3个月,整理2026阿里云服务器租用费用价格表,包括一年优惠价格、一个月和1小时收费明细表:
|
25天前
|
人工智能 关系型数据库 API
AI数字员工哪个好?2025十大品牌云原生适配实测:玄晶引擎/百度/阿里全链路方案
本文基于阿里云生态实测,解析AI数字员工从“可视化”到“业务落地”的转型趋势,揭露选型两大陷阱,结合玄晶引擎等50+案例与API性能数据,发布十大品牌榜单。聚焦云原生架构、API对接效率、开发友好度与全链路闭环四大维度,提供中小微企业至中大型企业的优选方案及开发者专属选型工具包,助力低成本高效落地。
267 8
|
1天前
|
存储 缓存 弹性计算
2026年阿里云 8 核 16G 云服务器解析测评:实例特性、收费标准与成本优化
阿里云 8 核 16G 云服务器作为中高端配置代表,覆盖计算型、通用算力型、AMD 专属型等多类实例,适配企业高并发服务、大数据处理、中型数据库等核心场景。不同实例依托差异化硬件架构与性能优化,满足从中小企业核心业务到大型企业轻量负载的多元需求,同时通过时长折扣、实例选型差异实现成本可控。本文结合实例特性、收费体系及省钱策略,为用户提供客观选型参考。
|
27天前
|
JavaScript Java 关系型数据库
基于springboot的社区垃圾分类管理系统
本系统基于Spring Boot与MySQL,结合物联网、大数据等技术,构建社区智能垃圾管理平台。实现垃圾投放监控、自动分类识别、积分激励及数据统计分析,提升管理效率与居民参与度,推动绿色社区可持续发展。
|
26天前
|
人工智能 运维 监控
开源项目分享 : Gitee热榜项目 2025-12-13 日榜
本文整理Gitee当日热门开源项目,涵盖AI智能体、低代码开发、数字人、容器化部署等前沿技术。聚焦智能化、降本增效与垂直场景应用,展现AI工程化、全栈融合与技术普惠趋势,助力开发者把握开源脉搏。
188 16