Eng*_*_DJ 7 java deployment build-automation automation executable-jar
是否有任何集成良好的应用程序管理堆栈,允许构建,部署和更新.war作为服务器运行的非Java应用程序?例如,作为服务器的消息使用者(但不是Web服务器并且没有Servlet),或.jar嵌入了Jetty的可执行文件?
构建和部署.wars非常简单:Maven有战争原型,Jenkins有一堆插件用于将.war文件部署到各种应用程序服务器,其中大多数都接受在运行时上传新的Web应用程序.像Elastic Beanstalk这样的工具使这个过程更加容易,与服务器环境的管理联系在一起.
相比之下,部署可执行文件.jar似乎重新发明了轮子.人们需要理清阴影依赖关系的最佳方法,并使用大量的Maven插件创建可执行的人工制品,将此工件存放在某处,然后找到在目标服务器上安装它的方法,并在必要时替换/升级它(Debian软件包)这将是一种方式).
这对我来说似乎非常"手动",以至于将应用程序部署.war到应用程序服务器似乎是有利的,即使它们不适合这样的环境,只是为了获得工具支持的好处.
您可以通过将应用程序部署到 osgi 容器来实现这一点。
当 osgi 包启动时,您可以挂钩 osgi 生命周期来运行您的应用程序。然后您可以远程启动和停止容器(如果容器支持)。
您的应用程序可以将它们的依赖项定义为 osgi 清单的一部分 - 但是在使用 maven 时使用阴影插件对 jar 进行着色并不困难,而且我认为管理比处理容器中的数百个 jar 更容易。
这个问题讨论使用 jenkins 持续部署 osgi 包。
另一种(也是更标准的)方法是编写自动化部署的脚本 - 可能使用专门构建的工具,例如puppet或Chef。puppet有一个Maven 插件,可让您从 Maven 存储库中提取工件以在 Puppet 脚本中使用。
从 jenkins 运行 puppet 或 Chef 很简单,如果您愿意,您可以向非技术人员提供对部署版本的访问权限,以允许他们只需单击一个按钮即可将新版本部署到环境中。
就像 @bagheera 建议构建应用程序的 rpm 并将它们作为服务启动一样,这是一种很好的方法,可以降低部署脚本的复杂性。