Jenkins插件的.hpi和.jpi有什么区别?

49

我已经以两种方式安装了Jenkins插件,一是手动将.hpi文件放在Jenkins主目录中进行安装,另一种是通过Jenkins前端进行安装(管理Jenkins>管理插件)。

我注意到的是,当我手动安装插件(下载为.hpi文件)时,它以扩展名.hpi安装,而通过Jenkins前端安装插件时,插件再次以扩展名.jpi安装。

但这是为什么呢?在后台发生了什么?我知道功能不会改变,但了解这个过程很有趣。

4个回答

58

两者应该是完全相同的,以至于当您像您所说的那样手动安装时,Jenkins会将hpi重命名为jpi

您在JENKINS_HOME中看到两个的原因是插件在Jenkins启动时加载的顺序:plugin.jpi优先于plugin.hpi,如果两者都存在。这就是上传安装方式确保上传的版本在重新启动后覆盖现有版本的方法。


有没有关于优先级的文档?我有一个情况,其中有两个插件版本,hpi(较旧版本)和jpi,hpi版本最终占据了优先权,因此由于不兼容性而导致其他依赖插件出现问题。 - Arcobaleno
@Arcobaleno,我认为这并没有被记录下来,但是可以在代码中进行验证。你的观察感觉很奇怪。一般来说,要么通过Jenkins操作插件来让Jenkins管理plugins/目录内容,要么-当你自己管理文件时-始终坚持一个后缀名用于所有文件。 - Oliver Gondža

23

我认为这是因为Jenkins从Hudson分叉而来,所以这就是hpi中的“H”。而“J”则明显是对它的更改。

在技术方面,jpi插件是使用gradle插件架构生成的,而hpi插件则是使用Maven架构生成的。

最终,正如您已经发现的那样,两者都可以生成Jenkins可以使用的插件。绝大多数插件都是使用Maven构建的,但我喜欢Gradle,因为它与用Groovy开发插件很好地链接在一起。您也可以使用Maven在Groovy中构建。


13
.hpi和.jpi与使用的构建工具(Maven vs. Gradle)无关。 - Oliver Gondža
2
答案2是正确的 - 当它是被接受的答案时,我无法删除。 - KeepCalmAndCarryOn

2
位于$JENKINS_HOME/plugins/中的插件应始终使用.jpi后缀(基本名称为插件标识符)。通常,即使在手动上传插件时,Jenkins也会强制执行此命名模式,而不管您用于上传的文件名是什么,因此我不确定您如何在此处拥有一个*.hpi文件,除非您直接将其复制到此文件系统位置。

1
从功能上来说,两者是一样的。
我只发现一个细微的区别:
在2023版本中:2.411,在离线插件(手动编译)的情况下,如果你将hpi文件粘贴到/var/jenkins_home/plugins中,插件不会被安装。我不得不将其重命名,插件在服务器启动时自动安装:
RUN mv /var/jenkins_home/plugins/easy-webhook-plugin.hpi /var/jenkins_home/plugins/easy-webhook-plugin.jpi

所以这可能是另一个区别:hpi插件不会在开始时安装,只有jpi插件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接