当前位置: 首页 > 面试题库 >

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

帅煌
2023-03-14
问题内容

在花了几个小时试图了解如何在 基于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启动的进程应该编译/构建/部署项目,但不能启动长期运行的线程,因此我必须以某种方式启动“外部”进程,下次再次尝试时,我想先终止它。

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


问题答案:

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

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

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

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

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



 类似资料:
  • 我试图在本地库伯内特斯集群上部署詹金斯映像。部署成功,但我无法让持久性数据工作。没有错误被抛出,新豆荚成功启动,唯一的问题是它不持久。 詹金斯·多克菲尔: Kubernetes部署文件: 库伯内特斯持久体积: 持续批量索赔 我在用Minikube进行本地开发。当然还有库贝特。 别看我做错了什么。感谢您的帮助。

  • 问题内容: 我有一个詹金斯安装程序,带有一堆管道。我写了一个新的管道,可以立即启动所有管道。我想建立其他阶段,即使其中一个失败。 该脚本当前看起来像这样 构建脚本本身包含应在其上运行的节点。 即使其中一个失败,脚本如何继续以下几个阶段。 干杯 问题答案: 如果使用该步骤,则默认情况下,该步骤应该可以按预期工作,作为选项,如果任何并行分支失败,则该选项将中止作业,默认为。 例如:

  • TL;DR:我需要在不同的文件中设置变量,可以通过jenkins管道自动更改。

  • 我想在Glassfish中使用Jenkins的这些批处理命令部署一个WAR。:

  • 有没有可能让詹金斯使用真正的浏览器而不是无头浏览器?我正在运行一些用TestNG编写的测试(使用Selenium webdriver)。当我运行testng时。在Eclipse中,浏览器启动并运行测试。但当我使用Jenkins并用maven运行测试时,它不会启动任何浏览器。

  • 问题内容: 简化的管道如下所示: 对于步骤5,我设置了Jenkins管道输入命令。我们不会在每次提交时都将产品部署到产品上,因此,如果我们中止所有这些工作,它将有大量的灰色版本。是否可以使用跳过选项,以使构建仍可以显示为 绿色 蓝色? 问题答案: 您不能这样做吗,无论您从输入中选择什么,它都会变成蓝色/绿色,然后您也可以根据它来运行部署?