Jenkins数据无损迁移+War包升级报错终极解决方案
Jenkins迁移/更新
针对
Jenkins
数据平滑迁移到新版,数据原封不动的读取原旧Jenkins
的配置,操作如下
部署命令
# 部署命令
##################### 新版Jenkins 在用 #####################
# 增加参数:-server -Xms1024m -Xmx2048m -XX:PermSize=256m # 临时测试两个jenkins容器则端口参数指定为:8081:8080、50001:50000
docker run -d \
--name jenkins \
-p 8080:8080 \
-p 50000:50000 \
-u root \
-v /opt/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /usr/local/apache-maven-3.5.0/repo:/usr/local/apache-maven-3.5.0/repo \
-v /usr/local/apache-maven-3.5.0:/usr/local/maven \
-v /usr/local/jdk1.8.0_171:/usr/local/jdk \
-v /etc/localtime:/etc/localtime \
-e JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -Duser.timezone=Asia/Shanghai" \
jenkins/jenkins:latest
##################### 旧版Jenkins 已停用#####################
# 增加参数:-server -Xms1024m -Xmx2048m -XX:PermSize=256m
#docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -u root \
# -v /opt/jenkins_home:/var/jenkins_home \
# -v /var/run/docker.sock:/var/run/docker.sock \
# -v /usr/bin/docker:/usr/bin/docker \
# -v /usr/local/apache-maven-3.5.0/repo:/usr/local/apache-maven-3.5.0/repo \
# -v /usr/local/apache-maven-3.5.0:/usr/local/maven \
# -v /usr/local/jdk1.8.0_171:/usr/local/jdk \
# -v /etc/localtime:/etc/localtime \
# -e JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:PermSize=256m -Duser.timezone=Asia/Shanghai" \
# --name jenkins jenkins/jenkins:lts
平滑迁移
通过
war
包升级或重新部署Jenkins
后挂载旧Jenkins
的数据目录及配置文件可能会有如下报错:
# 此处针对使用Docke方式部署,理论通用
# 若是迁移jenkins数据到同一台服务器上,则新Jenkins容器需先把开放的端口与旧jenkins容器不冲突才行,等配置无误再:
- 删除旧容器
- 删除新容器
- 更改回端口8080、50000
- 启动新容器
Docker部署新的Jenkins
部署新的Jenkins
,配置参数如下,数据挂载目录挂载到旧Jenkins
的数据目录上(旧数据就是挂载的宿主机的目录:/opt/jenkins_home
),所以即使docker rm -f Jenkins(旧容器)
,数据也不会丢,已经持久化到宿主机了;
访问新Jenkins
可能会直接报错(如上图)
解决:
- 点击下载
hpi
文件,并将其放到插件目录下/var/lib/jenkins/plugins/
- 重启jenkins
- 此时
Jenkins
已经显示我们的项目了,但部署会失败,原因是因为:- Jenkins新容器的ssh公钥没添加到
gitlab
、项目部署服务器的~/.ssh/authorized_keys
- 进入
Jenkins
容器,使用ssh
命令手动逐个连接一次项目部署的服务器ssh root@172.23.0.241
,输入yes
,退出即可 - 进入
Jenkins
容器,使用git clone
命令手动克隆项目,成功即为成功!
- Jenkins新容器的ssh公钥没添加到
- 此时
- 重启jenkins