每次点击升级按钮都像在拆盲盒?别担心,这篇指南让你告别 Jenkins 升级的惊心动魄。
还记得那次 Jenkins 升级后,整个团队盯着崩溃的构建流水线发呆的下午吗?或者是那个因为兼容性问题而不得不回滚的深夜?
如果你对 Jenkins 升级感到头疼 — 无论是面对新功能的诱惑,还是安全漏洞的威胁 — 那么这篇文章就是你需要的救命稻草。
一、为什么要给Jenkins升级?不只是追新那么简单
Jenkins 社区的活跃度超乎想象,几乎每四周就会有一个新版本发布。定期升级 Jenkins,就像给你的汽车做定期保养一样重要 — 不仅能享受到新功能,还能修复已知漏洞,提高系统稳定性。
最新版本的 Jenkins 通常包含性能优化、安全性增强和用户体验改进。例如,Jenkins 2.528 版本带来了更现代的 UI 界面、改进的 Breadcrumbs 导航以及 Java 类加载的性能优化。
如果你还在使用老旧的 Jenkins 版本,很可能面临安全漏洞的风险、插件兼容性问题以及社区支持缺失等诸多挑战。
升级 Jenkin 不仅能体验到更快的构建速度、更直观的操作界面,还能确保你的 CI/CD 流水线稳定可靠地运行。
二、升级前准备:打好这场战役的关键准备
俗话说"有备无患",在升级 Jenkins 前做好充分的准备工作,可以避免大多数升级过程中可能遇到的问题。
2.1 全面备份策略
备份是升级过程中的"安全绳",以下是需要备份的内容:
- Jenkins 家目录:默认情况下位于
/var/lib/jenkins,包含所有配置、作业历史和插件数据 - 自定义配置文件:如
/etc/sysconfig/jenkins(CentOS)或/etc/default/jenkins(Ubuntu) - 插件列表:可以通过 Jenkins 脚本控制台获取已安装插件列表
创建一个简单的备份脚本 jenkins_backup.sh:
#!/bin/bash
BACKUP_DIR="/opt/jenkins_backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
# 备份Jenkins家目录
sudo tar -czf $BACKUP_DIR/jenkins_home.tar.gz /var/lib/jenkins
# 备份配置文件
sudo cp /etc/sysconfig/jenkins $BACKUP_DIR/ 2>/dev/null || sudo cp /etc/default/jenkins $BACKUP_DIR/ 2>/dev/null
# 备份插件列表
sudo java -jar /usr/share/java/jenkins.war -list-plugins > $BACKUP_DIR/plugins.list 2>/dev/null
echo "Backup completed to $BACKUP_DIR"
2.2 环境兼容性检查
升级前需要确认环境是否符合新版本的要求:
# 检查当前Java版本
java -version
# 检查Jenkins当前版本
sudo java -jar /usr/share/java/jenkins.war --version
# 检查磁盘空间
df -h /var/lib/jenkins /usr/share/java
特别注意:Jenkins 2.405 及以上版本需要 Java 11 或更高版本,而 Jenkins 2.463 及以上则需要 Java 17 或 Java 21。如果 Java 版本不兼容,需先升级 Java:
# Ubuntu/Debian 安装 OpenJDK 17
sudo apt update
sudo apt install -y openjdk-17-jdk
# 配置 JAVA_HOME
echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f /usr/bin/java)))" | sudo tee -a /etc/default/jenkins
2.3 升级时机选择
选择合适的升级时机至关重要:
- 避免业务高峰期,如冲刺阶段或发布日
- 预留回滚时间,最好在周五下午前完成,以便有足够时间处理问题
- 通知相关团队,确保所有开发人员知晓维护窗口
三、三种升级方式:总有一款适合你
根据你的安装方式和需求,可以选择不同的升级方法。以下是三种常见的升级方式及其详细步骤。
3.1 通过 Web 界面自动升级(适合小版本升级)
对于小幅版本更新(如 2.463 → 2.464),Web 界面升级是最简单的方法。
步骤:
- 使用管理员账户登录 Jenkins Web 界面
- 进入 "系统管理" → "自动升级"
- 如果有可用更新,会显示在可用升级列表中
- 点击 "立即升级" 按钮
- 等待下载和自动重启完成
优点:简单直观,无需命令行操作
缺点:不适合大版本跨级升级,网络不稳定时容易失败
完成后,Jenkins 会自动重启并应用新版本。重要:升级过程中不要关闭浏览器或断电!
3.2 通过 APT 包管理器升级(适合通过官方源安装的环境)
如果你最初通过官方仓库安装 Jenkins,使用 APT 升级是最规范的方式。
步骤:
首先,确保已添加 Jenkins 官方仓库:
# Ubuntu/Debian 系统
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo "deb https://pkg.jenkins.io/debian-stable binary/" > /etc/apt/sources.list.d/jenkins.list'
然后执行升级:
# 更新包列表
sudo apt update
# 检查可用的Jenkins版本
apt list -a jenkins
# 升级到最新版本
sudo apt install jenkins
# 或者升级到特定版本
sudo apt install jenkins=2.528.2
升级完成后,重启 Jenkins 服务:
# 重启服务
sudo systemctl restart jenkins
# 检查服务状态
sudo systemctl status jenkins
3.3 手动替换 WAR 包方式(通用性最强)
手动方式适合任何安装环境,特别是在无法使用包管理器的情况下。
步骤:
- 停止 Jenkins 服务:
sudo systemctl stop jenkins
- 备份旧版本:
# 找到Jenkins安装目录(通常为/usr/share/java/或/usr/share/jenkins/)
JENKINS_DIR="/usr/share/java"
sudo cp $JENKINS_DIR/jenkins.war $JENKINS_DIR/jenkins.war.bak
- 下载新版本 WAR 包:
# 使用官方源或国内镜像(如清华大学镜像源)
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/latest/jenkins.war -P /tmp
- 替换 WAR 包:
sudo cp /tmp/jenkins.war $JENKINS_DIR/
sudo chown jenkins:jenkins $JENKINS_DIR/jenkins.war
- 重启服务:
sudo systemctl start jenkins
sudo systemctl status jenkins
- 验证升级:
访问http://your-jenkins-server:8080,登录后通过 "系统管理" → "关于Jenkins" 查看版本号。
四、PostgreSQL 升级实战:从旧版本升级到 Jenkins 2.528.2
让我们通过一个完整的示例,展示从旧版本升级到最新 Jenkins 2.528.2 的过程。
4.1 当前环境评估
假设当前环境为:
- Jenkins 版本:2.516.3
- 操作系统:Ubuntu 20.04
- Java 版本:OpenJDK 11
- 安装方式:通过 WAR 包安装
4.2 逐步升级过程
步骤 1:准备阶段
# 创建备份
sudo systemctl stop jenkins
BACKUP_DIR="/opt/jenkins_backup_$(date +%Y%m%d_%H%M%S)"
sudo mkdir -p $BACKUP_DIR
sudo tar -czf $BACKUP_DIR/jenkins_home.tar.gz /var/lib/jenkins
sudo cp /usr/share/java/jenkins.war $BACKUP_DIR/
# 检查磁盘空间
echo "Available disk space:"
df -h /var/lib/jenkins /usr/share/java
步骤 2:检查 Java 版本兼容性
Jenkins 2.528.x 需要 Java 11、17 或 21。由于我们已使用 Java 11,无需升级 Java。
步骤 3:执行升级
# 下载最新稳定版(2.528.2)
cd /tmp
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/2.528.2/jenkins.war
# 替换旧版本
sudo systemctl stop jenkins
sudo mv /usr/share/java/jenkins.war /usr/share/java/jenkins.war.old
sudo mv /tmp/jenkins.war /usr/share/java/
sudo chown jenkins:jenkins /usr/share/java/jenkins.war
步骤 4:启动并验证
# 启动服务
sudo systemctl start jenkins
# 监控启动日志
sudo tail -f /var/log/jenkins/jenkins.log
在日志中看到以下信息表示启动成功:
Jenkins is fully up and running
步骤 5:升级后检查
访问 Jenkins Web 界面,进行以下验证:
- 检查版本号:"系统管理" → "关于Jenkins",确认版本号为 2.528.2
- 检查插件兼容性:"系统管理" → "插件管理",更新所有可用的插件
- 运行测试作业:执行一个简单的测试流水线,验证基本功能正常
4.3 验证升级成功的完整测试流水线
创建一个名为 "Upgrade-Verification" 的 Pipeline 项目,使用以下脚本:
pipeline {
agent any
stages {
stage('Check Environment') {
steps {
script {
echo "Jenkins version: ${env.JENKINS_VERSION}"
echo "Job name: ${env.JOB_NAME}"
echo "Build number: ${env.BUILD_NUMBER}"
}
}
}
stage('Test Git SCM') {
steps {
git branch: 'main',
url: 'https://github.com/example/test-repo.git',
credentialsId: 'your-credentials-id'
echo "Git checkout successful"
}
}
stage('Test Build Tools') {
parallel {
stage('Test Maven') {
steps {
sh 'mvn --version'
}
}
stage('Test Docker') {
steps {
sh 'docker --version'
}
}
}
}
stage('Artifact Test') {
steps {
sh 'echo "Hello from Jenkins ${env.JENKINS_VERSION}" > message.txt'
archiveArtifacts artifacts: 'message.txt', fingerprint: true
}
}
}
post {
always {
publishHTML(
target: [
allowMissing: false,
alwaysLinkToLastBuild: false,
keepAll: true,
reportDir: '',
reportFiles: '',
reportName: 'Upgrade Report'
]
)
emailext (
subject: "Jenkins Upgrade Verification - ${currentBuild.result}",
body: """
Upgrade verification build ${currentBuild.result}
Build URL: ${env.BUILD_URL}
Jenkins Version: ${env.JENKINS_VERSION}
""",
to: "dev-team@yourcompany.com"
)
}
}
}
这个流水线会全面验证 Jenkins 的各项功能,包括 SCM 集成、构建工具、制品归档和通知功能。
五、升级后优化与故障排除
升级完成只是成功的一半,合理的优化和故障排除能确保新环境稳定运行。
5.1 性能调优建议
根据 的建议,可以进行以下优化:
调整 JVM 内存设置:
# 编辑 /etc/default/jenkins (Ubuntu) 或 /etc/sysconfig/jenkins (CentOS)
sudo vim /etc/default/jenkins
# 修改 JAVA_OPTS,例如:
JAVA_OPTS="-Xmx2048m -Xms1024m -XX:MaxPermSize=512m -Djava.awt.headless=true"
配置执行器数量:在 "系统管理" → "系统配置" 中,根据服务器 CPU 核心数调整 "执行器数量",避免资源过度占用。
5.2 常见问题与解决方案
问题 1:插件兼容性错误
症状:某些功能异常,插件页面显示不兼容警告
解决方案:
- 进入 "系统管理" → "插件管理" → "已安装"
- 筛选有更新的插件,批量升级
- 如果某个插件导致问题,可暂时禁用或降级
问题 2:启动失败或卡住
症状:服务无法启动,日志中出现错误信息
解决方案:
# 查看详细日志
sudo journalctl -u jenkins -f
# 或
sudo tail -f /var/log/jenkins/jenkins.log
# 常见解决步骤
sudo systemctl stop jenkins
# 检查Java版本
java -version
# 清理缓存(极端情况)
sudo mv /var/lib/jenkins/.jenkins /var/lib/jenkins/.jenkins.old
# 从备份恢复
sudo tar -xzf /opt/jenkins_backup_YYYYMMDD_HHMMSS/jenkins_home.tar.gz -C /
问题 3:界面样式错乱或功能异常
症状:页面显示不正常,某些按钮失效
解决方案:
- 强制刷新浏览器缓存(Ctrl+F5)
- 检查主题兼容性,暂时切换回默认主题
- 通过 "系统管理" → "脚本命令行" 运行以下命令清除缓存:
Jenkins.instance.doDoWipeOutJobHistoryCache()
Jenkins.instance.doWipeOutQueueCache()
5.3 回滚方案
当升级出现无法快速解决的问题时,回滚是最后的手段:
# 停止服务
sudo systemctl stop jenkins
# 恢复旧版WAR包
sudo cp /usr/share/java/jenkins.war /usr/share/java/jenkins.war.new
sudo cp /usr/share/java/jenkins.war.old /usr/share/java/jenkins.war
# 如果有必要,恢复数据备份
sudo tar -xzf /opt/jenkins_backup_YYYYMMDD_HHMMSS/jenkins_home.tar.gz -C /
# 启动服务
sudo systemctl start jenkins
六、最佳实践与总结
通过多次升级经验,我总结了以下最佳实践:
6.1 升级策略建议
- 定期升级:不要长期停留在旧版本,建议每 3-6 个月升级一次
- 测试环境先行:先在测试环境验证,确认无误后再在生产环境升级
- 版本渐进:避免跨多个主要版本升级,循序渐进更安全
- 关注变更日志:升级前阅读 Jenkins LTS 变更日志,了解重大变化
6.2 监控与维护
升级后建立健康监控:
# 简单的健康检查脚本
#!/bin/bash
JENKINS_URL="http://localhost:8080"
STATUS_CODE=$(curl -s -o /dev/null -w "%{http_code}" $JENKINS_URL)
if [ $STATUS_CODE -ne 200 ]; then
echo "Jenkins health check failed with status: $STATUS_CODE"
# 发送警报...
fi
6.3 文档化流程
记录每次升级的详细信息,包括:
- 升级前版本和升级后版本
- 遇到的问题和解决方案
- 回滚步骤(如果执行过)
- 团队反馈和性能变化
通过遵循本文的指南和最佳实践,你可以将 Jenkins 升级从一个令人紧张的任务,转变为一个可预测、可管理的常规操作。记住,成功的升级 = 充分准备 + 正确方法 + 应急预案。
现在,是时候给你的 Jenkins 来一次愉快的"换装秀"了!无论是通过简单的 Web 界面点击,还是精细的手动操作,都能让你的 CI/CD 流水线焕发新的活力。

被折叠的 条评论
为什么被折叠?



