Azure 应用服务上的 Jetty 部署如何工作?

2022-09-02 14:08:21

我有一个在 Azure 应用服务实例上运行的 Java Web 应用。为了部署它,我使用了一个 Bitbucket 存储库,其中包含一个 .war 文件。当我将新的 .war 文件提交到此存储库时,它应该由服务自动部署。但是,通常情况下,我必须重新启动,重新部署,甚至通过FTP上传.war文件,才能成功完成部署。

我有一个驻留在此服务中的 Jetty 实例,因此我的文件被命名为 。AFAIK,当上传到服务(无论是通过Bitbucket还是FTP)时,此.war文件应取消存档到同一目录中,即.就我而言,这不会发生。Web应用程序使用单独位于里面的文件。每隔一段时间,我就会在 下得到一个文件夹,其中包含两个默认文件和 .我丝毫不知道是什么原因导致文件夹与这些默认文件一起出现。我唯一的线索是,在我更改环境变量后,它发生了几次。.warROOT.war/site/wwwroot/webappsROOT.war/site/wwwroot/webappsROOT/site/wwwroot/webappsindex.jspbackground.pngROOT

此外,在文件夹显示为空服务器文件后,重新部署应用的唯一方法是通过 FTP 或门户中提供的控制台手动删除此文件夹,只有这样,我的 Web 应用才会成功执行重新部署请求。ROOTROOT

所以,如果它不够清楚,我的问题是这里发生了什么?我无法从我所面对的行为中找出任何东西。我觉得我正在盲目地使用此 Azure 服务,并且在出现问题时无法修复任何内容。是否有任何资源可以解释部署 Web 应用时在后台发生的情况?


答案 1

因此,Azure API Apps 是 PAAS,而不是 IAAS 服务。您可以通过访问 来访问 PaaS 平台,您可以在其中浏览 CMD 或 Powershell 中的文件系统,并且可以看到正在运行的进程。这可能感觉就像你在单个 VM 上,但你不是。您在此处看到的数据将向下复制到 API 应用程序实例中。您可以通过扩展 API 应用程序来控制实例数。yoursite.scm.azurewebsites.net

我经常看到你的部署问题,然后ROOT是空的(内部工作看到这个修复...)。每次对我来说都有效的最佳方法是停止您的API应用程序,手动解压缩您的ROOT.war。将文件移动到 /ROOT/ 中,然后启动 API 应用。

您可以简单地放置 ROOT.war,并在重新打开它时让系统解压缩它,但这有时会导致该空的 ROOT 目录,然后需要再次重新启动。

所有这些都让我转向Spring-Boot。无需拆包。只需配置您的web.config并删除jar文件即可。

https://docs.microsoft.com/en-us/azure/app-service-web/web-sites-java-custom-upload#springboot


答案 2

我遇到了同样的问题。解决方案是在取消部署后调用终结点。

  1. 停止 Azure 应用服务。
  2. 在 /webapps 文件夹中部署 ROOT.war 项目。
  3. 启动 Azure 应用服务。
  4. 调用应用服务的 URL 一次。

四个步骤非常重要,并启动您之前提到的过程(自动部署)。

我浪费了很多时间弄清楚问题出在哪里。


推荐