7

是否有任何集成良好的应用程序管理堆栈允许构建、部署和更新.war作为服务器运行的非 Java 应用程序?例如消息消费者是服务器(但不是网络服务器并且没有 Servlet),还是.jar嵌入了 Jetty 的可执行文件?

构建和部署.wars 非常简单:Maven 具有战争原型,Jenkins 有大量插件用于将.war文件部署到各种应用程序服务器,其中大多数接受在运行时上传新的 Web 应用程序。像 Elastic Beanstalk 这样的工具使这个过程更加容易,与服务器环境的管理联系在一起。

相比之下,部署 executable .jars 似乎是在重新发明轮子。需要找出遮蔽依赖关系并使用大量 Maven 插件创建可执行工件的最佳方法,将该工件存放在某处,然后找到一种将其安装在目标服务器上的方法,并在必要时替换/升级它(Debian 软件包将是这样做的一种方式)。

这一切对我来说似乎都是“手动的”,以至于将应用程序部署为.war应用程序服务器似乎是有利的,即使它们不适合这样的环境,只是为了让您获得工具支持的好处。

4

2 回答 2

4

您可以通过将应用程序部署到 osgi 容器来实现这一点。

当 osgi 包启动时,您可以挂钩到 osgi 生命周期以运行您的应用程序。然后您可以远程启动和停止容器(如果容器支持)。

您的应用程序可以将它们的依赖项定义为 osgi 清单的一部分 - 但是在使用 maven 时使用 shade 插件着色 jar 并不困难,我认为管理而不是处理容器中的数百个 jar 会更容易。

这个问题讨论了使用 jenkins 持续部署 osgi 包。

另一种(也是更标准的)方法是编写自动化部署的脚本 - 可能使用专门构建的工具,如puppetchef。有一个用于 puppet 的maven 插件,它允许您从 maven 存储库中提取工件以用于您的 puppet 脚本。

从 jenkins 运行 puppet 或 Chef 很简单,如果需要,您可以向非技术人员提供对部署构建的访问权限,以允许他们通过单击按钮将新构建部署到环境中。

像@bagheera 建议构建应用程序的 rpm 并将它们作为服务启动是一种很好的方法,可以降低部署脚本的复杂性。

于 2012-07-14T11:11:44.620 回答
3

似乎您正在寻找用于构建自包含可执行 jar 的依赖管理器和用于部署的包管理器。除了您提到的工具之外,您还可以查看ant+ivy的 build+dependency mgmt 和rpmbuild +rpm+yum 的 linux 包管理。

于 2012-07-12T05:28:18.963 回答