第一阶段:旧系统备份准备(源服务器)
# 1. 停止 Jenkins 服务
sudo systemctl stop jenkins
# 2. 备份关键目录(完整路径)
JENKINS_HOME=$(sudo grep -m1 'JENKINS_HOME' /etc/default/jenkins | cut -d= -f2)
sudo tar -czvf jenkins_full_backup.tar.gz \
$JENKINS_HOME \
/etc/default/jenkins \
/var/log/jenkins \
/usr/share/jenkins \
/etc/init.d/jenkins
# 3. 生成插件列表(迁移后验证用)
ls $JENKINS_HOME/plugins/ | awk -F '.' '{print $1}' > plugins.list
第二阶段:新系统基础配置(目标服务器)
# 1. 安装相同版本的 Java
sudo apt update
sudo apt install openjdk-8-jdk -y
# 2. 安装相同版本的 Jenkins(从备份获取版本号)
OLD_VERSION=$(grep JENKINS_VERSION jenkins_full_backup.tar.gz | head -1 | awk -F'-' '{print $2}')
wget https://pkg.jenkins.io/debian-stable/binary/jenkins_${OLD_VERSION}_all.deb
sudo dpkg -i jenkins_${OLD_VERSION}_all.deb
第三阶段:数据恢复与配置迁移
# 1. 停止新 Jenkins 服务
sudo systemctl stop jenkins
# 2. 恢复备份(保持原有路径)
sudo tar -xzvf jenkins_full_backup.tar.gz -C /
# 3. 修复关键权限
sudo chown -R jenkins:jenkins $JENKINS_HOME
sudo chmod 775 /var/log/jenkins
sudo chmod 755 /etc/init.d/jenkins
# 4. 恢复环境配置(可选)
sudo cp /etc/default/jenkins /etc/default/jenkins.bak
sudo mv /etc/default/jenkins.old /etc/default/jenkins
第四阶段:网络配置与安全加固
# 1. 修改系统配置(如变更IP)
sudo nano $JENKINS_HOME/config.xml
# 查找并更新旧服务器IP地址:
# <jenkinsUrl>http://新服务器IP:8080</jenkinsUrl>
# 2. 更新 SSH 密钥(如果使用 Git 凭证)
sudo cp $JENKINS_HOME/.ssh/id_rsa* /var/lib/jenkins/.ssh/
sudo chown jenkins:jenkins /var/lib/jenkins/.ssh/*
# 3. 修复插件兼容性
sudo java -jar /usr/share/jenkins/jenkins.war --enable-future-plugins
第五阶段:验证与服务启动
# 1. 启动服务
sudo systemctl daemon-reload
sudo systemctl start jenkins
# 2. 检查日志
sudo tail -f /var/log/jenkins/jenkins.log
# 3. 验证插件恢复
curl -s http://localhost:8080/pluginManager/installed | jq '.plugins[] | .shortName' > new_plugins.list
diff -y plugins.list new_plugins.list
第六阶段:安全优化与监控
# 1. 重置 admin 密码(可选)
echo '替换为旧服务器 $JENKINS_HOME/users/admin_*/config.xml 中的密码哈希' | \
sudo tee $JENKINS_HOME/users/admin_*/config.xml
# 2. 防火墙配置
sudo ufw allow 8080/tcp
sudo ufw allow 50000/tcp # Jenkins 代理端口
# 3. 设置监控
sudo apt install nmon -y
nmon # 实时资源监控
迁移后验证清单:
- 访问
http://新服务器IP:8080
- 验证所有作业配置完整性
- 测试触发构建操作
- 检查凭证库是否完整
- 确认插件全部加载(无兼容性错误)
⚠️ 证书迁移提示:如果使用 HTTPS:
sudo cp /旧/路径/jenkins_keystore.jks $JENKINS_HOME/ sudo nano /etc/default/jenkins # 添加: JAVA_ARGS="-Djavax.net.ssl.trustStore=$JENKINS_HOME/jenkins_keystore.jks"
通过此流程可实现零数据损失的无缝迁移,90%以上的迁移问题源自文件权限错误,务必执行 chown -R jenkins:jenkins $JENKINS_HOME
。