1. 概述

Jenkins 拥有一套强大的插件管理系统。虽然我们通常可以通过 Jenkins 的 Web 管理界面来更新插件,但从命令行更新插件可以更好地支持自动化运维,特别是对于有大量 Jenkins 实例的企业级用户。

本教程将介绍如何使用 Jenkins CLI(命令行接口)更新插件。我们会先介绍 Jenkins CLI 的 install-plugin 命令,然后展示如何使用其 groovy 命令执行脚本完成插件更新。

我们使用的 Jenkins 版本为 2.452.3,运行在本地主机 8080 端口上。操作需要 Jenkins 管理员权限。


2. Jenkins CLI 简介

Jenkins 提供了内置的命令行接口(CLI),用于通过脚本或终端与 Jenkins 交互。这对于自动化日常运维任务非常有用。

CLI 的核心是一个名为 jenkins-cli.jar 的 JAR 文件。我们可以在 Jenkins 的“管理 Jenkins > 脚本控制台”页面中下载它。

Jenkins CLI 提供多个命令,例如:

  • list-plugins:列出所有已安装的插件
  • install-plugin:安装或更新插件
  • groovy:执行 Groovy 脚本

本教程将重点使用 install-plugingroovy 命令进行插件更新。


3. 使用 install-plugin 命令

3.1 获取待更新插件列表

首先,我们使用 list-plugins 列出所有插件,并过滤出需要更新的:

$ java -jar jenkins-cli.jar -s http://localhost:8080 -auth admin:admin_secret_password list-plugins
ant                                Ant Plugin                                  497.v94e7d9fffa_b_9 (511.v0a_a_1a_334f41b_)
antisamy-markup-formatter          OWASP Markup Formatter Plugin               162.v0e6ec0fcfcf6
apache-httpcomponents-client-4-api Apache HttpComponents Client 4.x API Plugin 4.5.14-208.v438351942757
...

输出中括号内的版本号表示有新版本可用。我们可以通过如下命令提取这些插件名称:

$ update_list=$(java -jar jenkins-cli.jar -s http://localhost:8080 -auth admin:admin_secret_password list-plugins | grep ")$" | awk '{print $1}')
$ echo $update_list
ant commons-lang3-api echarts-api font-awesome-api git github-branch-source github gradle junit pipeline-graph-view pipeline-groovy-lib pipeline-model-api pipeline-model-definition pipeline-model-extensions pipeline-stage-tags-metadata workflow-api workflow-cps workflow-durable-task-step

3.2 批量更新插件

接下来使用 install-plugin 安装所有需要更新的插件,并添加 -restart 参数使 Jenkins 重启以应用更新:

$ java -jar jenkins-cli.jar -s http://localhost:8080 -auth admin: admin_secret_password install-plugin $update_list -restart
Installing ant from update center
Installing commons-lang3-api from update center
Installing echarts-api from update center
...

更新完成后,再次检查是否还有待更新插件:

$ java -jar jenkins-cli.jar -s http://localhost:8080 -auth admin:admin_secret_password list-plugins | grep ")$" | awk '{print $1}'

如果输出为空,说明所有插件均已更新至最新版本。


4. 使用 groovy 命令更新插件

除了 install-plugin,我们还可以使用 groovy 命令执行 Groovy 脚本来完成插件更新。这种方式更灵活,适合复杂场景。

4.1 执行 Groovy 脚本

$ java -jar jenkins-cli.jar -s http://localhost:8080 -auth admin: admin_secret_password groovy = < update_plugins.groovy

该命令通过标准输入将脚本内容传递给 Jenkins CLI 执行。

4.2 Groovy 脚本内容

以下是 update_plugins.groovy 的内容:

import jenkins.model.*

def plugins = Jenkins.instance.pluginManager.plugins.findAll {
    it -> it.hasUpdate()
}.collect {
    it -> it.getShortName()
}

Jenkins.instance.pluginManager.install(plugins, false).each{ it -> it.get() }

Jenkins.instance.safeRestart()

逐行说明如下:

  • import jenkins.model.*:导入 Jenkins 插件管理相关类
  • plugins.findAll { it.hasUpdate() }:找出所有有待更新的插件
  • collect { it.getShortName() }:提取插件名称
  • pluginManager.install():安装插件列表
  • safeRestart():安全重启 Jenkins 以生效更新

执行完毕后,再次检查插件更新状态,确认所有插件均已更新。


5. 总结

本文介绍了两种从命令行更新 Jenkins 插件的方法:

使用 install-plugin 命令

  • 优点:简单直接,适合一次性更新
  • 缺点:灵活性较差,无法处理复杂逻辑

使用 groovy 命令 + Groovy 脚本

  • 优点:可编写复杂逻辑,适合自动化运维
  • 缺点:需要熟悉 Groovy 语法

两种方式都支持 Jenkins 插件的自动化更新,可根据实际场景选择使用。建议将更新操作封装为脚本,便于日常维护和 CI/CD 流程集成。


原始标题:Updating Jenkins Plugins From the Command Line