目前,我正在尝试改进使用Apache Karaf 2.4和Jenkins的测试环境中的自动化。
我的目标是,如果Jenkins成功构建项目(并更新Maven存储库),则在Karaf中部署新版本。卡拉夫和詹金斯在不同的机器上运行。
我目前的解决方案是使用功能描述符,但我遇到了很多麻烦:我发现没有简单的方法来更新Karaf 2.4中的功能包。据我所知,没有命令可以在一个命令中更新现有功能的所有捆绑包。 我当前的方法是在特殊模式之后 grep list 命令的输出,找出所有BID,然后对所有ID运行 update 。这种方法往往会产生错误(它可能包括当它们匹配相同的命名模式时不属于该功能的包)。我想知道是否有更好的方法可以自动更新我的所有功能包?
此外,还有另一个问题:当从功能文件中添加或删除新功能时,我发现没有优雅的方式来更新它。我目前的方法是先卸载所有相关的软件包(再次使用grep ...),然后从Karaf中删除存储库,然后在部署文件夹中替换新版本的功能文件。由于这是非常间接的,我想知道,如果有更好的方法在Karaf 2.4中做到这一点?
我认为部署在Karaf 3中变得更好,但由于这个错误(link)我无法使用它。由于我处于测试环境中并且我的软件非常不稳定,我经常不得不杀死Karaf进程并重新启动它。这是卡拉夫3中的一个大问题。希望它能在卡拉夫4中修复,但我不想等到它被释放。
您是否有任何建议,我的部署流程如何改进?也许有比我的解决方案更好的方法(我真的希望如此!),但我还没有看到它们。
答案 0 :(得分:0)
这是一个很好的要求,因为我最近一直在做类似的事情。基本上我已经得到了相同的设置。
因此,您只需在karaf上安装最新的Jolokia osgi servlet即可通过REST访问所有JMX命令。
为了展示我创建了一个maven插件(我将在几周内发布这些来源 - 甚至可能会进入karaf maven插件),通过在Karaf上面的休息请求来安装当前的捆绑包,它&# 39; s目前还能够检查现有的捆绑包。
基本上你需要发出以下休息POST:
{
"type":"EXEC",
"mbean":"org.apache.karaf:type=bundle,name=root",
"operation":"install(java.lang.String,boolean)",
"arguments":["mvn:${project.groupId}/${project.artifactId}/${project.version}", true]
}
您需要使用最新的Jolokia快照版本来绕过基于角色的身份验证,该身份验证在最新的Karaf版本中使用。 为此,您还需要在etc中创建名为org.jolokia.osgi.cfg的配置文件,其中包含以下条目:
org.jolokia.user=karaf
org.jolokia.realm=karaf
org.jolokia.authMode=jaas
有关详情,请查看issue。