一尘不染

在詹金斯上持续部署基于OSGi的应用程序

jenkins

在花了几个小时试图了解如何在 基于OSGi的应用程序* 的情况下使 连续部署
工作之后,我终于提出了关于stackoverflow的第一个问题,希望能指出一些我可能做错了或错过的事情-我觉得自己走错了路…
*

这是我想要实现的:

  1. 构建一些捆绑 并将其安装到Maven存储库(这里没有问题,使用bnd)

  2. 现在,所有的捆绑软件都组成了我的应用程序(通过了所有测试等等),我想 部署并运行 该应用程序,也就是说,使用这些捆绑软件启动一些OSGi框架。

  3. 启动 不是问题-“ mvn pax:provision -Dframework = equinox”可以解决问题。我的应用程序启动了码头,因此很容易通过浏览器进行验证以查看一切是否正常(此外,所有测试均如此)

  4. 但是,现在,尝试 “连续” ,下次我想应用此过程时,我确实应该确保首先 关闭 我的应用程序 的运行实例 (至少释放正在使用的端口)。因此,要 重新运行 所有程序,我必须以某种方式首先关闭旧安装。

这是我的问题开始的地方:这有什么帮助我吗?我知道这里有 maven-deploy-plugin ,但这仅在将某些WAR /
EAR文件部署到某些标准应用程序容器中时才有用(似乎不需要重新启动)。

我真的只需要运行一些脚本来 启动 OSGi环境-然后,下次在再次启动它之前将 正常 关闭
。对于tomcat,jetty,jboss等,有一些 shutdown.sh 脚本或 mvn jetty:stop
指令,但是我真的必须自己编写此类脚本吗?我认为这是我开始走错路的地方,我想一定有人遇到了这些问题并解决了这些问题;)

我知道我可以以某种方式尝试使用 JMX 或使用 telnet控制台 来访问正在运行的实例,以发出“停止0”命令,但这 感觉不对

我猜想从jenkins启动的进程应该编译/构建/部署项目,但不能启动长期运行的线程,因此我必须以某种方式启动“外部”进程,下次再次尝试时,我想先终止它。

有任何想法吗?也许我缺少什么?在此先感谢您的任何投入!


阅读 172

收藏
2020-07-25

共1个答案

一尘不染

在我看来,telnet方式似乎是最干净的。

但是,如果您想发挥创造力,则可以创建一个简单的关机捆绑软件,并在重新部署之前安装它。确保已自动部署,以便在安装捆绑软件时将其激活。激活此捆绑包后,其工作是完全关闭当前正在运行的Equinox容器。

我仍然建议采用telnet方法,因为在尝试重新部署之前,您需要确保已关闭容器。

如果您不喜欢上述任何一种方法,请查看Apache
Karaf
。您可以发送正在运行的容器命令。您甚至可以停止,卸载然后重新安装所有捆绑软件,而无需停止Karaf。

Karaf可以在Apache Felix或Eclipse Equinox之上运行。

2020-07-25