Tomcat 部署 Jenkins → Docker Jenkins 完整迁移方案

Tomcat 部署 Jenkins → Docker Jenkins 完整迁移方案
目录核心原理一、第一步找到 Tomcat 上 Jenkins 的 JENKINS_HOME最容易踩坑二、旧服务器停止服务 完整备份三、新服务器准备 Docker Jenkins 挂载目录1. 创建宿主机持久化目录2. 传输备份包并解压重中之重权限修复Docker 迁移头号坑四、启动 Docker Jenkins两种方式任选方式 1docker run 命令方式 2docker-compose.yml推荐长期使用五、启动后关键校验 常见问题修复1. 访问地址注意上下文路径2. 凭证丢失 / 无法解密3. Agent 节点无法连接4. 构建脚本内绝对路径失效六、可选迁移优化建议七、回滚方案核心原理Jenkins 所有配置、任务、凭证、构建记录全部保存在JENKINS_HOME目录。Tomcat 部署 war 包形式的 Jenkins 和 Docker Jenkins 本质是同一套程序直接迁移完整JENKINS_HOME即可不需要单独导出任务。 ⚠️ 关键前提新旧 Jenkins 大版本尽量保持一致例如旧是 2.401新镜像也选用 2.401-lts跨大版本极易插件报错一、第一步找到 Tomcat 上 Jenkins 的 JENKINS_HOME最容易踩坑Jenkins.war 丢进 TomcatJENKINS_HOME位置分 3 种情况未配置环境变量默认Tomcat 启动用户家目录/usr/share/tomcat/.jenkins或/home/tomcat/.jenkinstomcat context.xml 配置了 JENKINS_HOME生产最常见Environment nameJENKINS_HOME value/data/jenkins_home typejava.lang.String/去${CATALINA_HOME}/conf/Catalina/localhost/jenkins.xml查找 value 路径启动脚本指定 export JENKINS_HOME/xxx快速验证登录 Jenkins →系统管理 → 系统信息找到JENKINS_HOME字段复制路径二、旧服务器停止服务 完整备份进入 Jenkins 页面http://ip:8080/jenkins/exit优雅关闭停止 Tomcatsystemctl stop tomcat # 确认进程全部关闭打包完整JENKINS_HOME必须停止服务再打包防止文件损坏# 替换为你查到真实JENKINS_HOME路径 JENKINS_OLD/data/jenkins_home tar -zcvf jenkins_full_backup.tar.gz ${JENKINS_OLD}不要只备份 jobs 目录secrets/、credentials.xml、secret.key存放所有凭证丢了凭证全部失效。三、新服务器准备 Docker Jenkins 挂载目录1. 创建宿主机持久化目录mkdir -p /opt/jenkins_home2. 传输备份包并解压# 旧机器推送 scp jenkins_full_backup.tar.gz root新机器IP:/opt/ # 新机器解压 cd /opt tar -zxvf jenkins_full_backup.tar.gz -C /opt/jenkins_home --strip-components1--strip-components1去掉压缩包外层文件夹保证文件直接落在/opt/jenkins_home/下重中之重权限修复Docker 迁移头号坑官方镜像jenkins/jenkins:lts容器内运行用户UID1000GID1000宿主机解压出来的文件属主一般是 root/tomcat容器会报 Permission deniedchown -R 1000:1000 /opt/jenkins_homeCentOS/RHEL 开启 SELinux 环境启动挂载增加:z标签解决权限拦截四、启动 Docker Jenkins两种方式任选方式 1docker run 命令docker run -d \ --name jenkins \ -p 8080:8080 \ -p 50000:50000 \ -v /opt/jenkins_home:/var/jenkins_home:z \ jenkins/jenkins:lts/var/jenkins_home是容器内部固定 JENKINS_HOME 路径不要修改方式 2docker-compose.yml推荐长期使用services: jenkins: image: jenkins/jenkins:lts container_name: jenkins ports: - 8080:8080 - 50000:50000 volumes: - /opt/jenkins_home:/var/jenkins_home:z restart: always启动docker compose up -d五、启动后关键校验 常见问题修复1. 访问地址注意上下文路径Tomcat 部署默认访问路径http://xxx:8080/jenkins带 /jenkins 上下文 Docker 默认根路径http://xxx:8080两种处理方案方案 A推荐修改 Jenkins 系统 URL 登录 Jenkins → 系统管理 → 系统 找到Jenkins URL把旧地址http://ip:8080/jenkins/改成新地址http://新IP:8080/保存重启。方案 B让 Docker Jenkins 也使用/jenkins上下文 启动参数增加环境变量-e JENKINS_OPTS--prefix/jenkins访问地址http://ip:8080/jenkins2. 凭证丢失 / 无法解密现象所有凭据显示【无法解密】 原因备份不完整缺少secrets/secret.key✅ 解决方案重新用停止服务后的完整 JENKINS_HOME 打包迁移不要只拷贝 jobs3. Agent 节点无法连接旧 Agent 配置里写的是旧 Jenkins 地址需要修改 Agent 配置中的 Jenkins URL或者重启 Agent 重新建立连接4. 构建脚本内绝对路径失效重点排查脚本中硬编码旧服务器路径/opt/maven、/data/workspace工具JDK/Maven/Git在容器内不存在建议容器内安装对应工具或者使用工具自动安装插件六、可选迁移优化建议不要直接使用 latest 标签锁定和旧环境一致的版本例如jenkins/jenkins:2.401.3-lts迁移前在旧 Jenkins 升级全部插件到最新减少启动报错先并行运行新旧 Jenkins 测试确认任务正常执行再关停 Tomcat 旧实例大量构建历史占用磁盘可迁移完成后选择性清理旧 build 记录七、回滚方案迁移出现重大问题停止 docker jenkins重新启动 tomcat 旧 Jenkins数据完全不受影响。