如何持续部署一个功能到karaf?

How to continously deploy a feature to karaf?

我想持续部署一个功能到基于 Karaf 3.0.4 的 ServiceMix 6.0。

我首先使用 karaf 控制台尝试了这个。但是也存在一些问题。它是针对标准的 karaf 安装无法确定的 karaf console if a feature is already installed (see my on this)。 karaf 控制台的另一个问题是它不支持退出代码。因此无法可靠地确定功能安装是否已成功完成。

然后我 installed hawtio and tried to use the exposed JMX beans via jolokia/REST that is bundled with hawtio. The problem here is that karaf 3.0.x is unable to update a feature. Therefore features must be uninstalled first. However the FeatureService 只提供卸载明确指定的功能的可能性。但是,当安装该功能的先前版本时,子功能也会随之安装。它们也需要升级,因此首先要卸载。所以我需要一种方法来迭代我没有的功能的子功能。

那么如何将功能持续部署到 karaf 3.0.x?

karaf 3 没有更新功能的好方法。

这对于 karaf 4 来说已经好一些了。它允许更新功能库,然后您可以简单地再次安装该功能。它将检测到功能已更改,并在包中进行必要的更改。

我们实施的第一个尝试是 bash 脚本。最大的问题是卸载旧版本。因此,我们为功能及其子功能的名称设置了约定。因此我们可以使用以下方法查找已安装的功能:

features=$(echo "feature:list" | ssh -p $smx_ssh_port $smx_user@$smx_host | grep -h "<feature-name-convention-regex>.*|.*x.*|" | cut -f1 -d" " | tr '\n' ' ')

然后可以将其传递给 feature:uninstall,也可用于检测在调用 feature:repo-add -i 后是否安装了功能。

剩下的问题是我们无法引用 3rd-party 子功能,因为当需要安装更新版本时它们不会被卸载,我们无法确定是否所有子功能都已成功安装.