0%

Jenkins 升级最佳实践指南

Jenkins 升级最佳实践指南

基于 Jenkins 2.495 → 2.553 升级实战经验总结

📋 目录

  1. 升级前准备
  2. 升级 Jenkins 核心
  3. 升级插件
  4. 升级后验证
  5. 常见问题与解决方案
  6. 回滚方案

🚨 升级前准备

1. 检查当前状态

1
2
3
4
5
6
7
8
# 查看 Jenkins 版本
curl -s http://localhost:8080/login | grep -o 'Jenkins [0-9.]*'

# 查看 Java 版本
java -version

# 查看插件列表
ls -la /var/jenkins_home/plugins/*.hpi | wc -l

2. 备份(必须!)

1
2
3
4
5
6
7
8
9
10
11
# 备份 Jenkins 主目录
cp -r /var/jenkins_home /var/jenkins_home.backup.$(date +%Y%m%d)

# 备份 jenkins.war
cp /usr/share/java/jenkins.war /usr/share/java/jenkins.war.backup.$(date +%Y%m%d)

# 备份插件目录
cp -r /var/jenkins_home/plugins /var/jenkins_home/plugins.backup.$(date +%Y%m%d)

# 备份任务配置
cp -r /var/jenkins_home/jobs /var/jenkins_home/jobs.backup.$(date +%Y%m%d)

3. 检查系统要求

Jenkins 2.551+ 要求

  • ✅ Java 21 或 Java 25
  • ✅ 内存:至少 2GB
  • ✅ 磁盘:至少 10GB 可用空间

检查 Java 版本

1
2
java -version
# 如果低于 Java 21,需要升级

升级 Java

1
2
3
4
5
cd /home
wget https://download.java.net/java/GA/jdk21.0.2/.../openjdk-21.0.2_linux-x64_bin.tar.gz
tar -xzf openjdk-21.0.2_linux-x64_bin.tar.gz
export JAVA_HOME=/home/jdk-21.0.2
export PATH=$JAVA_HOME/bin:$PATH

4. 通知团队

  • 📧 发送升级通知邮件
  • 📅 选择低峰时段(如周末或深夜)
  • ⏸️ 暂停正在进行的构建

🚀 升级 Jenkins 核心

方法 1:Jenkins UI 升级(推荐)

Jenkins 管理插件管理Updates

  1. 点击 Check now (立即检查)
  2. 找到 Jenkins 核心更新
  3. 勾选 Jenkins
  4. 点击 Download now and install after restart
  5. 勾选 Restart Jenkins when installation is complete
  6. 点击 Install
  7. 等待重启(约 5-10 分钟)

优点

  • ✅ 自动处理依赖
  • ✅ 安全回滚
  • ✅ 图形化界面

方法 2:手动替换 jenkins.war

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 停止 Jenkins
systemctl stop jenkins

# 2. 备份
cp /usr/share/java/jenkins.war /usr/share/java/jenkins.war.backup

# 3. 下载新版本
cd /usr/share/java
wget https://updates.jenkins.io/download/war/2.553/jenkins.war

# 4. 设置权限
chown jenkins:jenkins jenkins.war
chmod 644 jenkins.war

# 5. 启动 Jenkins
systemctl start jenkins

# 6. 查看日志
tail -f /var/log/jenkins/jenkins.log

🔧 升级插件

1. 批量升级所有插件(推荐)

Jenkins 管理插件管理Updates

  1. 点击 Check now
  2. 点击 Select all (全选)
  3. 点击 Download now and install after restart
  4. 勾选 Restart Jenkins when installation is complete
  5. 等待重启

优点

  • ✅ 自动解决依赖关系
  • ✅ 避免版本冲突
  • ✅ 最安全的方式

2. 处理依赖冲突

如果遇到依赖错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 1. 停止 Jenkins
systemctl stop jenkins

# 2. 删除冲突插件
cd /var/jenkins_home/plugins
rm -f git*.hpi git*.jpi git-client*.hpi git-client*.jpi gitlab*.hpi gitlab*.jpi
rm -rf git git-client gitlab-plugin

# 3. 启动 Jenkins
systemctl start jenkins

# 4. 重新安装插件(按顺序)
# Jenkins UI → 插件管理 → Available plugins
# 1. 先安装 Git Client
# 2. 再安装 Git Plugin
# 3. 最后安装 GitLab Plugin

✅ 升级后验证

1. 检查版本

1
2
# 访问 Jenkins Web UI
curl -s http://localhost:8080/login | grep -o 'Jenkins [0-9.]*'

2. 检查插件状态

Jenkins 管理插件管理Installed

  • ✅ 所有插件状态为 “已启用”
  • ✅ 无依赖错误
  • ✅ 无警告信息

3. 测试构建

  1. 选择一个简单任务
  2. 点击 立即构建
  3. 查看构建日志
  4. 确认成功完成

4. 检查日志

1
2
3
4
5
# 查看 Jenkins 日志
tail -100 /var/log/jenkins/jenkins.log

# 查找错误
grep -i "error\|exception\|failed" /var/log/jenkins/jenkins.log | tail -20

🔧 常见问题与解决方案

问题 1:Java 版本太低

错误信息

1
Running with Java 17, which is older than the minimum required version (Java 21)

解决方案:升级 Java 到 21


问题 2:插件依赖缺失

错误信息

1
Plugin is missing: jersey3-api (3.1.11-2.v4a_b_db_cf4557b_)

解决方案

  1. Jenkins UI → 插件管理 → Available plugins
  2. 搜索 jersey3-api
  3. 安装并重启

问题 3:类加载冲突

错误信息

1
java.lang.ClassNotFoundException: org.eclipse.jgit.errors.MissingObjectException

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
# 1. 停止 Jenkins
systemctl stop jenkins

# 2. 删除冲突插件
cd /var/jenkins_home/plugins
rm -f git*.hpi git-client*.hpi gitlab*.hpi
rm -rf git git-client gitlab-plugin

# 3. 重启 Jenkins
systemctl start jenkins

# 4. 重新安装插件(按顺序)
# Git Client → Git Plugin → GitLab Plugin

问题 4:任务配置保存失败

错误信息

1
Error while serving .../configSubmit

解决方案

  1. 重启 Jenkins(清除缓存)
  2. 如果不行,清理插件缓存:rm -rf /var/jenkins_home/plugins/.cache
  3. 重新安装相关插件

问题 5:Webhook 不触发

解决方案

  1. 检查 GitLab Server 配置
  2. 检查任务触发器
  3. 检查 GitLab Webhook
  4. 测试 Webhook

🔙 回滚方案

回滚 Jenkins 核心

1
2
3
4
5
6
7
8
# 1. 停止 Jenkins
systemctl stop jenkins

# 2. 恢复备份
cp /usr/share/java/jenkins.war.backup /usr/share/java/jenkins.war

# 3. 启动 Jenkins
systemctl start jenkins

回滚插件

1
2
3
4
5
6
7
8
9
# 1. 停止 Jenkins
systemctl stop jenkins

# 2. 恢复插件备份
rm -rf /var/jenkins_home/plugins
cp -r /var/jenkins_home/plugins.backup /var/jenkins_home/plugins

# 3. 启动 Jenkins
systemctl start jenkins

📋 升级检查清单

升级前

  • 备份 Jenkins 主目录
  • 备份 jenkins.war
  • 备份插件目录
  • 备份任务配置
  • 检查 Java 版本(≥ 21)
  • 通知团队
  • 选择低峰时段

升级中

  • 升级 Jenkins 核心
  • 等待重启完成
  • 升级所有插件
  • 等待插件安装完成

升级后

  • 检查 Jenkins 版本
  • 检查插件状态
  • 检查任务配置
  • 测试构建
  • 检查日志
  • 验证 Webhook

📖 参考链接


升级前务必备份!升级时按顺序操作!升级后全面验证!🔥