插件是增强 Jenkins 环境功能以满足组织或用户特定需求的主要方式。有超过一千个不同的插件可以安装在 Jenkins 控制器上,用于集成各种构建工具、云提供商、分析工具等等。
插件及其依赖项可以从更新中心自动下载。更新中心是 Jenkins 项目运营的一项服务,它提供了由 Jenkins 社区的各种成员开发和维护的开源插件清单。
本节涵盖了从 Jenkins Web UI 中管理插件的基础知识,到在控制器文件系统上进行更改的所有内容。
Jenkins 提供了两种在控制器上安装插件的方法
使用 Web UI 中的“插件管理器”。
使用 Jenkins CLI install-plugin 命令。
每种方法都会导致插件被 Jenkins 加载,但可能需要不同级别的访问权限和权衡才能使用。
这两种方法都要求 Jenkins 控制器能够从更新中心下载元数据,无论是 Jenkins 项目运营的主要更新中心[1],还是自定义更新中心。
插件被打包为自包含的 .hpi 文件,其中包含插件成功运行所需的所有必要代码、图像和其他资源。
最简单和最常见的安装插件方法是通过 管理 Jenkins > 插件 视图,该视图对 Jenkins 环境的管理员可用。
在 可用 选项卡下,可以搜索和查看可从已配置的更新中心下载的插件。
大多数插件可以通过选中插件旁边的复选框并点击 不重启安装 立即安装和使用。
|
如果可用插件列表为空,则控制器可能配置不正确,或者尚未从更新中心下载插件元数据。点击 立即检查 按钮强制 Jenkins 尝试联系其已配置的更新中心。 |
管理员也可以使用 Jenkins CLI,它提供了一个安装插件的命令。用于管理 Jenkins 环境的脚本或配置管理代码可能需要安装插件,而无需在 Web UI 中进行直接用户交互。Jenkins CLI 允许命令行用户或自动化工具下载插件及其依赖项。
java -jar jenkins-cli.jar -s https://:8080/ install-plugin SOURCE ... [-deploy] [-name VAL] [-restart]
Installs a plugin either from a file, an URL, or from update center.
SOURCE : If this points to a local file, that file will be installed. If
this is an URL, Jenkins downloads the URL and installs that as a
plugin.Otherwise the name is assumed to be the short name of the
plugin in the existing update center (like "findbugs"),and the
plugin will be installed from the update center.
-deploy : Deploy plugins right away without postponing them until the reboot.
-name VAL : If specified, the plugin will be installed as this short name
(whereas normally the name is inferred from the source name
automatically).
-restart : Restart Jenkins upon successful installation.
更新中心只允许安装插件的最新发布版本。如果需要插件的旧版本,Jenkins 管理员可以下载旧的 .hpi 归档文件并手动将其安装在 Jenkins 控制器上。
Jenkins 将下载的插件存储在 plugins 目录中,后缀为 .jpi,无论插件最初是 .jpi 还是 .hpi 后缀。
如果管理员手动将插件归档文件复制到 plugins 目录中,则应将其命名为 .jpi 后缀,以匹配从更新中心安装的插件所使用的文件名。
假设已下载 .hpi 文件,登录的 Jenkins 管理员可以通过 Web UI 上传该文件。
导航到 Web UI 中的 管理 Jenkins > 插件 页面。
点击 高级 选项卡。
在 部署插件 部分下,从您的系统选择 .hpi 文件或输入归档文件的 URL。
部署 插件文件。
上传插件文件后,必须手动重启 Jenkins 控制器才能使更改生效。
假设系统管理员已明确下载 .hpi 文件,管理员可以将文件手动放置在文件系统上的特定位置。
将下载的 .hpi 文件复制到 Jenkins 控制器上的 JENKINS_HOME/plugins 目录中(例如,在 Debian 系统上,JENKINS_HOME 通常是 /var/lib/jenkins)。如果管理员手动将插件归档文件复制到 plugins 目录中,则应将其命名为 .jpi 后缀,以匹配从更新中心安装的插件所使用的文件名。
必须重启控制器,插件才能加载并在 Jenkins 环境中可用。
|
更新站点中插件目录的名称[1]并不总是与插件的显示名称相同。搜索 plugins.jenkins.io 以查找所需插件将提供指向归档文件的相应链接。 |
更新列在 插件 页面的 更新 选项卡中,可以通过选中所需插件更新的复选框并点击 立即下载并在重启后安装 按钮来安装。
默认情况下,Jenkins 控制器每 24 小时检查一次更新中心是否有更新。要手动触发更新检查,只需点击 更新 选项卡中的 立即检查 按钮。
检索已安装插件及其版本列表的最简单方法是使用 Jenkins 脚本控制台。
按照以下步骤操作
打开 Jenkins 脚本控制台。
导航到 管理 Jenkins > 脚本控制台。
运行以下脚本以列出已安装的插件及其版本
Jenkins.instance.pluginManager.plugins.each {
println("${it.getShortName()}: ${it.getVersion()}")
}
此脚本迭代每个已安装的插件并打印其短名称和版本。
当 Jenkins 环境中不再使用某个插件时,从 Jenkins 控制器中删除该插件是明智之举。这提供了许多好处,例如减少启动或运行时内存开销,减少 Web UI 中的配置选项,以及消除未来与新插件更新发生冲突的可能性。
此视频回顾了从 Jenkins 卸载插件的过程。
卸载插件的最简单方法是导航到 插件 页面的 已安装 选项卡。从那里,Jenkins 将自动确定哪些插件可以安全卸载(那些不是其他插件依赖项的插件),并提供一个按钮来执行此操作。
也可以通过从控制器上的 JENKINS_HOME/plugins 目录中删除相应的 .jpi 文件来卸载插件。插件将继续运行,直到控制器重新启动。
|
如果删除了插件文件但其他插件需要它,Jenkins 控制器可能会无法正确启动。 |
卸载插件不会删除插件可能创建的配置。如果存在引用插件创建的数据的现有作业/节点/视图/构建/等配置,则在启动期间,Jenkins 将警告某些配置无法完全加载并忽略无法识别的数据。
由于配置将保留直到被覆盖,重新安装插件将导致这些配置值重新出现。
禁用插件是停用插件的一种更温和的方式。Jenkins 将继续识别插件已安装,但不会启动插件,并且来自此插件的任何扩展都将不可见。
Jenkins 管理员可以通过取消选中 插件 页面的 已安装 选项卡上的复选框来禁用插件(见下文)。
系统管理员也可以通过在 Jenkins 控制器上创建一个文件来禁用插件,例如:JENKINS_HOME/plugins/PLUGIN_NAME.jpi.disabled。
禁用插件创建的配置的行为就像插件被卸载一样,因为它们会在启动时产生警告,但会被忽略。
也可以通过 Jenkins CLI 使用 enable-plugin 或 disable-plugin 命令启用或禁用插件。
enable-plugin 命令接收要启用的插件列表。此命令还将启用所选插件所依赖的任何插件。
java -jar jenkins-cli.jar -s https://:8080/ enable-plugin PLUGIN ... [-restart]
Enables one or more installed plugins transitively.
PLUGIN : Enables the plugins with the given short names and their
dependencies.
-restart : Restart Jenkins after enabling plugins.
disable-plugin 命令接收要禁用的插件列表。输出将显示成功和失败操作的消息。如果只想查看错误消息,可以指定 -quiet 选项。-strategy 选项控制当指定插件之一被列为另一个已启用插件的可选或强制依赖项时将采取的操作。
java -jar jenkins-cli.jar -s https://:8080/ disable-plugin PLUGIN ... [-quiet (-q)]
[-restart (-r)] [-strategy (-s) strategy]
Disable one or more installed plugins.
Disable the plugins with the given short names. You can define how to proceed with the
dependant plugins and if a restart after should be done. You can also set the quiet mode
to avoid extra info in the console.
PLUGIN : Plugins to be disabled.
-quiet (-q) : Be quiet, print only the error messages
-restart (-r) : Restart Jenkins after disabling plugins.
-strategy (-s) strategy : How to process the dependant plugins.
- none: if a mandatory dependant plugin exists and
it is enabled, the plugin cannot be disabled
(default value).
- mandatory: all mandatory dependant plugins are
also disabled, optional dependant plugins remain
enabled.
- all: all dependant plugins are also disabled, no
matter if its dependency is optional or mandatory.
|
与从 UI 启用和禁用插件需要重启才能完成过程一样,使用 CLI 命令所做的更改将在 Jenkins 重启后生效。 |
|
固定插件功能在 Jenkins 2.0 中已移除。Jenkins 2.0之后的版本不捆绑插件,而是提供了一个向导来安装最有用的插件。 |
固定插件 的概念适用于与 Jenkins 1.x 捆绑在一起的插件,例如 Matrix Authorization plugin。
默认情况下,每当 Jenkins 升级时,其捆绑插件都会覆盖当前安装在 JENKINS_HOME 中的插件版本。
但是,当捆绑插件被手动更新时,Jenkins 会将该插件标记为固定到特定版本。在文件系统上,Jenkins 会创建一个名为 JENKINS_HOME/plugins/PLUGIN_NAME.jpi.pinned 的空文件来指示固定。
在 Jenkins 启动期间,固定插件永远不会被捆绑插件覆盖。(较新版本的 Jenkins 会在固定的插件版本旧于当前捆绑的版本时发出警告。)
将捆绑插件更新到更新中心提供的版本是安全的。这通常是获取最新功能和修复所必需的。捆绑版本偶尔会更新,但不一致。
插件管理器允许明确取消固定插件。也可以手动创建/删除 JENKINS_HOME/plugins/PLUGIN_NAME.hpi.pinned 文件来控制固定行为。如果 pinned 文件存在,Jenkins 将使用用户指定的任何插件版本。如果文件不存在,Jenkins 将在启动时将插件恢复到默认版本。
功能有时会从 Jenkins 核心中分离出来(或拆分出来)并移入插件中。
许多插件,例如 Subversion 和 JUnit,最初都是 Jenkins 核心功能。当插件在分离之前附加到 Jenkins 核心时,它可能使用或可能未使用其完整功能与其他依赖相同 Jenkins 版本的插件。为确保当插件所依赖的功能从 Jenkins 核心中分离出来时插件不会失败,如果它指定了对分离前 Jenkins 核心版本的依赖,则有必要在分离的插件中设置依赖项。即使没有明确说明,也假定存在对分离插件的依赖。
对于不经常更新其所依赖的 Jenkins 核心版本的插件,隐式依赖项会随着时间的推移而积累。
它是“隐式”的,因为它没有在插件中明确说明,并且它是一个依赖项,因为 Jenkins 核心不确定在插件分离之前 Jenkins 核心中可用的 API 是否有必要。
例如,由于 Instance Identity 插件从 Jenkins 核心中分离出来,Jenkins 核心不知道依赖插件是否需要以前存在于 Jenkins 核心中的任何功能。这会产生一个隐式依赖项。
作为 Jenkins 管理员,您可以在插件管理器页面上看到具有隐式依赖项的插件。将鼠标悬停在“卸载”按钮上,将显示具有隐式依赖项的插件列表。
可以通过发布依赖于较新最低 Jenkins 核心版本的新版本插件来删除隐式依赖项。改进插件教程提供了可以帮助插件开发人员更新插件以依赖较新最低 Jenkins 核心版本的步骤。
在插件管理器中插件旁边有一个名为“健康评分”的指标。
您可以在插件管理器的可用更新和已安装页面中找到相同的指标。
| 评分值始终基于最新的可用数据。这意味着没有针对特定插件版本的评分。插件管理器已安装和更新页面上可用的评分并不代表已安装的版本。 |
此指标来自 Plugin Health Scoring。
此服务正在收集每个插件的数据。
数据可能与插件的源代码、插件仓库的内容或有关插件的外部指标(例如未解决的拉取请求数量)相关。
然后使用这些数据来评估项目的状态。所有插件都以相同的方式进行评估,这意味着可以公平地比较插件。
虽然只显示评分,但此值背后的详细信息可在插件站点上每个插件的健康评分部分中找到。
也可以直接在 Plugin Health Scoring 服务上找到详细信息。要访问它,您需要将插件名称附加到评分 URL。例如,Mailer 插件的健康评分 URL 是 plugin-health.jenkins.io/scores/mailer。
评分的每个部分可以有一个或多个元素被评估。每个部分的每个组件对总评分的影响可能或多或少。