Jetty在Azure应用服务上的部署方式是什么?

19
我有一个Java Web应用程序,运行在Azure App Service实例上。我使用Bitbucket仓库中的.war文件进行部署。当我提交新的.war文件到这个仓库时,该服务应该自动部署它。然而,更多情况下,我必须重新启动、重新部署或甚至通过FTP上传.war文件才能成功完成部署。
我在这个服务中只有一个Jetty实例,因此我的.war文件名为ROOT.war。据我所知,当上传到服务中(无论是通过Bitbucket还是FTP),这个.war文件应该被解压缩到相同的目录,即/site/wwwroot/webapps。但在我的情况下,这并没有发生。Web应用程序能够使用仅坐落于/site/wwwroot/webapps下的ROOT.war文件。并且每隔一段时间,我会在/site/wwwroot/webapps下获得一个ROOT文件夹,里面包含两个默认文件index.jsp和background.png。我不知道是什么原因导致ROOT文件夹出现这些默认文件。唯一的线索是,这种情况曾在我更改环境变量后几次发生。
此外,在ROOT文件夹出现空服务器文件后,我唯一能够重新部署应用程序的方法是通过FTP或门户提供的控制台手动删除这个ROOT文件夹,然后我的重新部署请求才能成功。
因此,如果不够清楚,我的问题是:这到底是怎么回事?我无法理解我面对的行为。我感觉自己在盲目地使用Azure服务,当出现问题时无法进行修复。是否有任何资源可以解释Web应用程序部署时后台发生的事情?

你能在 GitHub 上提一个关于这个问题的 Issue 吗?我认为这个仓库可能是这个:https://github.com/Azure/azure-sdk-for-java - Thiago Custodio
@ThiagoCustodio 我实际上正在使用Azure Search REST API,因此我只是从我的应用程序发送请求,而不是使用Azure提供的任何库。 - halileohalilei
1
@halileohalilei 我的建议是尝试将完整的文件结构添加到 BitBucket 存储库中以部署您的应用程序,而不是将 war 文件放在 webapps 下,例如存储库中的 webapp/<your app name>/ - Peter Pan
@ThiagoCustodi 这实际上是 Azure API 应用程序平台的问题,而不是 azure-sdk-for-java 的问题,应该在支持票证中提出。这个问题已经被知晓(我已经亲自与团队讨论过),但如果能够显示它影响更多的人,那么就可以提高优先级。 - Dan Ciborowski - MSFT
2个回答

1
所以,Azure API Apps是PAAS而不是IAAS服务。您可以通过访问yoursite.scm.azurewebsites.net来访问PaaS平台,在那里您可以在CMD或Powershell中浏览文件系统,并查看运行进程。这可能感觉像您在单个VM上,但实际上并非如此。您在此处看到的数据会复制到您的API应用程序实例中。您可以通过扩展API应用程序来控制有多少个实例。
我经常看到您部署后ROOT为空的问题(正在内部工作以解决此问题...)。对我而言,每次都有效的最佳方法是停止API应用程序,手动解压缩ROOT.war。将文件移动到/ROOT/中,然后启动API应用程序。
您可以简单地放置ROOT.war,并在打开它时让系统解压缩它,但这有时会导致空的ROOT目录,然后需要另一个重启。
所有这些都让我转向Spring-Boot。无需解压缩即可配置您的web.config并且放置jar文件。

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


1
我遇到了同样的问题。解决方法是在部署后调用终端节点。
  1. 停止 Azure 应用服务。
  2. 将 ROOT.war 构件部署到 /webapps 文件夹中。
  3. 启动 Azure 应用服务。
  4. 至少调用一次应用服务的 URL。
四个步骤非常重要,可以启动您之前提到的自动部署过程。
我花了很多时间才找出问题所在。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接