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的数据目录及配置文件可能会有如下报错:

image-20220719164919684

# 此处针对使用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命令手动克隆项目,成功即为成功!
posted @ 2022-08-03 18:22  秋风お亦冷  阅读(600)  评论(0编辑  收藏  举报