从一台服务器迁移 Jenkins + Docker + Maven + JDK 的平移方案与执行手册
# 迁移目标把原“40”服务器上的 Jenkins(含插件与凭据)、Docker(镜像/容器/卷/配置)、Maven、JDK 及相关配置平移到一台新服务器,迁移后各工具可无感继续使用,尽量减少停机。> 适用对象:基于 Linux 的常见安装(OpenJDK、Apache Maven、Docker CE、OpenSSH、Jenkins LTS)。> 假设你能获取到旧机上的数据盘或通过网络把关键目录拷
迁移目标
把原服务器上的 Jenkins(含插件与凭据)、Docker(镜像/容器/卷/配置)、Maven、JDK 及相关配置平移到一台新服务器,迁移后各工具可无感继续使用,尽量减少停机。
适用对象:基于 Linux 的常见安装(OpenJDK、Apache Maven、Docker CE、OpenSSH、Jenkins LTS)。
假设你能获取到旧机上的数据盘或通过网络把关键目录拷到新机;若旧机彻底不可用,见文末“无可用备份的重建策略”。
一、总体思路(先并行、后切换,保留回滚)
- 建立新服务器(相同或兼容的发行版/架构)。
- 在新机安装相同主版本的 JDK/Maven/Docker/Jenkins(或先装低版本,恢复后再逐步升级)。
- 从旧机拷贝关键数据目录到新机(重点是 JENKINS_HOME、Maven 设置、Docker 卷/Compose 文件等)。
- 在新机启动服务做“影子验证”(先不要对外暴露或用临时端口/内网访问)。
- 冻结旧机(停止 Jenkins/Docker)、做最终增量同步。
- 切换 DNS/反向代理/防火墙到新机。
- 验证并观察;保留旧机/快照一段时间以便回滚。
二、需要迁移的关键资产清单
- Jenkins
- 目录:
$JENKINS_HOME
(常见/var/lib/jenkins
)包含:jobs、plugins、users、credentials、secrets、config.xml、节点配置等 - 外挂脚本、构建工具缓存:
/var/lib/jenkins/.m2
、/var/lib/jenkins/.npm
等 - 反代/证书:Nginx/Apache 配置与证书文件(若有)
- 目录:
- Docker
- Compose 文件、部署脚本目录(如
/opt/*
,/srv/*
, 仓库脚本) - 数据卷(named volumes)与绑定目录数据
- Docker 守护进程配置
/etc/docker/daemon.json
- 私有镜像仓库登录凭据(
/root/.docker
或运行账号的~/.docker
)
- Compose 文件、部署脚本目录(如
- Maven
- 全局或 Jenkins 用户的
settings.xml
、settings-security.xml
- 本地仓库缓存(可选)
~/.m2/repository
- Maven 安装目录(若是手动安装,如
/opt/maven
)
- 全局或 Jenkins 用户的
- JDK
- 安装目录(包管理安装可重装;手动安装如
/opt/java/*
需要复制)
- 安装目录(包管理安装可重装;手动安装如
- SSH/凭据
- Jenkins 凭据已经包含在
$JENKINS_HOME
的credentials.xml
与secrets/
(务必与secret.key
一起迁移) - 任何部署密钥、Webhook token、机器人账号等
- Jenkins 凭据已经包含在
三、信息盘点与导出(旧机仍可访问时)
在旧机执行,收集版本与插件清单,便于新机对齐与追踪。
# 1) 版本信息
uname -a
cat /etc/os-release || lsb_release -a
java -version
mvn -v
docker version
jenkins_ver=$(grep -A1 "<version>" /var/lib/jenkins/config.xml 2>/dev/null | head -n1); echo "$jenkins_ver"
# 2) Jenkins 插件清单(离线也可)
ls -1 /var/lib/jenkins/plugins/*.jpi /var/lib/jenkins/plugins/*.hpi \
| xargs -n1 basename | sed -E 's/\.(jpi|hpi)$//' > /tmp/jenkins-plugins.txt
# 3) Docker 资产列表
docker ps -a --format 'table {{.Names}}\t{{.Image}}\t{{.Ports}}' > /tmp/docker-containers.txt
docker images --format 'table {{.Repository}}:{{.Tag}}\t{{.ID}}\t{{.Size}}' > /tmp/docker-images.txt
docker volume ls > /tmp/docker-volumes.txt
# 4) 关键配置备份(打包但不含大数据卷)
sudo tar czf /tmp/jenkins_home_meta.tgz \
--warning=no-file-changed \
-C /var/lib jenkins \
--exclude='jenkins/workspace/*/target' \
--exclude='jenkins/workspace/*/.git' \
--exclude='jenkins/fingerprints' \
--exclude='jenkins/cache'
sudo tar czf /tmp/docker_etc.tgz -C / etc/docker
sudo tar czf /tmp/maven_cfg.tgz -C /var/lib/jenkins .m2 || true
把这些文件抄存下来(或随全量数据一起传走)。
四、在新机准备运行环境
先创建同名用户/组,保持路径一致,可减少权限问题。
# 1) 系统准备
sudo useradd -m -s /bin/bash jenkins || true
sudo usermod -aG docker jenkins || true # 安装 Docker 后再执行
# 2) 安装基础环境(示例:RHEL/CentOS Stream/AlmaLinux)
sudo dnf install -y java-17-openjdk java-17-openjdk-devel
sudo dnf install -y maven git curl wget unzip
# Docker(CE)
curl -fsSL https://get.docker.com | sh
sudo systemctl enable --now docker
# Jenkins(按旧版本或 LTS,对齐更稳妥)
# 参考官方仓库;如需精确版本,可下载相应 rpm/deb 安装
若 Jenkins 通过 Docker 运行,也可以直接用容器方案(见“可选:容器化 Jenkins”)。
五、迁移 Jenkins(文件级恢复,最稳)
- 在新机先安装 Jenkins 服务但不要启动,或启动后立即停止:
sudo systemctl stop jenkins || true
- 将旧机的
$JENKINS_HOME
完整复制到同一路径(常见/var/lib/jenkins
):
- 若仍可网络同步(推荐 rsync,支持断点/增量):
# 在新机上执行,从旧机拉数据
sudo rsync -aHAX --delete --numeric-ids -e "ssh -p <PORT>" \
root@old-server:/var/lib/jenkins/ /var/lib/jenkins/
- 若通过离线包/磁盘:
sudo tar xzf /path/to/jenkins_home_full.tgz -C /
- 权限修正并启动:
sudo chown -R jenkins:jenkins /var/lib/jenkins
sudo find /var/lib/jenkins -type d -exec chmod 755 {} \;
sudo systemctl start jenkins
sudo systemctl status jenkins --no-pager
- 登录 Jenkins,核对:
- 插件是否加载、作业/视图是否在、凭据可用(能拉代码、能推镜像)。
- Global Tool Configuration 中的 JDK/Maven/Docker 路径是否存在。
- Manage Nodes & Clouds:代理节点是否在线(如果有,更新控制器地址或入站连接)。
- 系统设置中的 Jenkins URL、Webhook 回调地址更新为新机域名/IP。
只要
$JENKINS_HOME
连同secrets/secret.key
一并迁移,凭据会保持可用。
六、迁移 Maven 与 JDK
- Maven
- 复制 Jenkins 账号的
.m2
(含settings.xml
和settings-security.xml
):sudo rsync -a root@old:/var/lib/jenkins/.m2/ /var/lib/jenkins/.m2/ sudo chown -R jenkins:jenkins /var/lib/jenkins/.m2
- 若旧机是手动安装 Maven 到
/opt/maven
,也复制过去并在 Jenkins 工具里指向同路径,或改用包管理版本。
- 复制 Jenkins 账号的
- JDK
- 若 Jenkins 工具里是“自动安装”,联网环境下可直接同版本安装;
- 若是手动目录(如
/opt/java/jdk-17
),复制过去并在 Jenkins 全局工具中指向。
七、迁移 Docker(应用与数据)
- 配置
- 拷贝
/etc/docker/daemon.json
(如含镜像加速、insecure registries),然后systemctl restart docker
。
- 拷贝
- 数据
- 如仅用于构建镜像并推送远端仓库,通常无需迁移
/var/lib/docker
(体积大、可重新拉取)。 - 若本机运行长期容器并有数据卷,需要迁移 Compose 文件与卷数据。
- 如仅用于构建镜像并推送远端仓库,通常无需迁移
示例:导出/导入 named volume(以 mydata
为例):
# 旧机导出
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
tar czf /backup/mydata.tgz -C / data
# 新机导入
docker run --rm -v mydata:/data -v $(pwd):/backup alpine \
sh -c "cd / && tar xzf /backup/mydata.tgz"
Compose 项目迁移(推荐把所有部署写成 Compose):
# 复制 compose 目录
rsync -a root@old:/opt/myapp/ /opt/myapp/
cd /opt/myapp && docker compose up -d
八、网络与入口
- 保持与旧机相同的对外端口与路径(Nginx/Apache 反代配置复制)。
- 切换时优先改 DNS/负载均衡/反代指向新机,而不是改客户端配置。
- 防火墙/安全组放行新机端口:
80/443/8080/50000
(Jenkins 代理端口)等。
九、切换与验证清单(可打印)
- 旧机:停止 Jenkins 与相关容器,确保数据静止
sudo systemctl stop jenkins docker compose -f /opt/*/docker-compose.yml down # 按需
- 增量同步一次 Jenkins 和卷数据(rsync 再跑一遍)
- 新机:启动 Jenkins、应用容器
- 验证
- Jenkins 首页打开、登录 OK
- 任一典型流水线完整跑通:拉代码、构建、单测、打包、制品上传、镜像构建推送、部署
- Webhook 到达新机(检查 GitLab/GitHub 回调 200)
- 凭据有效(Git/Docker/制品库)
- 节点在线(若有分布式 Agent)
- 切换 DNS/反代到新机;观察 1–2 小时
- 记录变更与打快照;保留旧机只读 7–14 天
十、回滚方案
- 保留旧机快照或数据包,DNS/反代指回旧机即可回退。
- Jenkins 若已经产生新数据,回滚需确认流水线与制品的一致性(必要时做只进不退方案:仅在新机继续)。
十一、可选:把 Jenkins 容器化以便未来迁移
使用 Docker 运行 Jenkins,可把迁移简化为“移动一个卷”:
docker run -d --name jenkins \
-p 8080:8080 -p 50000:50000 \
-v jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkins/jenkins:lts
迁移时仅需导出 jenkins_home
卷并在新机导入,或使用外部存储/NFS。
十二、旧机已彻底不可用且无备份时的重建思路
- 新装 Jenkins LTS + JCasC(Configuration as Code),以 YAML 管理 Jenkins 配置与插件版本;
- 依据项目仓库中的 Jenkinsfile 逐个导入任务;
- 重新创建凭据(从安全密码库/运维处);
- Maven/JDK/Docker 安装与镜像仓库配置按本文执行;
- 后续务必建立定时备份(如下)。
十三、备份与灾备建议(迁移后立刻配置)
- Jenkins
- 每日 rsync/tar 备份
$JENKINS_HOME
到对象存储或远端 - 额外使用 “ThinBackup” 或 “JCasC” + 插件锁版本
- 每日 rsync/tar 备份
- Docker
- Git 管理所有 Compose/部署脚本,数据卷定期快照/备份
- 系统
- 关键配置 (
/etc/*
,/opt/*
) Git 化或打包 - 数据盘快照策略:日快照保留 7 天,周快照保留 4 周
- 关键配置 (
附:最小可执行的迁移指令模板
把旧机的 Jenkins 平移到新机(网络可通场景):
# 旧机:暂停 Jenkins,确保一致性
sudo systemctl stop jenkins
# 新机:准备路径与权限
sudo mkdir -p /var/lib/jenkins
sudo chown -R jenkins:jenkins /var/lib/jenkins
# 新机:从旧机拉取
sudo rsync -aHAX --delete --numeric-ids -e "ssh -p 22" \
root@<old-ip>:/var/lib/jenkins/ /var/lib/jenkins/
# 权限修复并启动
sudo chown -R jenkins:jenkins /var/lib/jenkins
sudo systemctl start jenkins
若还有 Docker Compose 项目及卷,参考第七节的卷迁移与 Compose 启动命令逐个恢复即可。
更多推荐
所有评论(0)