一、快速迁移方法

1、将 Jenkins 工作目录打包压缩。(因为 Jenkins 的所有配置都存放在工作目录下,所以我们迁移工作目录下的内容即可)

1.1、进入容器挂载的 Jenkins 工作目录,如果没有挂载,则进入容器,默认的工作目录是:/var/jenkins_home。此目录下又两个文件夹占用空间很大,为:./workspace 和 ./caches 第一个是保存的拉取下的代码和编译源文件,第二个是缓存文件,都可以删除掉已节省打包后的文件大小。保险起见先备份到另一个位置再删除。

1.2、执行命令压缩目录

#第一个参数为压缩后到文件名,第二个为你要压缩到目录所在位置
tar -cvf jenkins_home.tar /home/data/jenkins_home/

2、将压缩包迁移至要部署的新机器中,我这用的 scp 命令

scp jenkins_home.tar root@IP地址:/root
1.会提示一段确认信息,输入yes后回车
2.提示输入目标机器登录密码,输入后回车

3、在新机器上启动一个全新的 Jenkins 容器,并挂载好工作目录

#我这是拉取的私人仓库的镜像,如果没有初始镜像的话,可以将最后的镜像名替换为:jenkins/jenkins:latest (来源:DockerHub)
docker run -d --privileged=true \
--name jenkins-hercules -p 8010:8080 -p 50000:50000 \
--restart=always \
-v /home/jenkins/data/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/localtime:/etc/localtime \
--user root \
jenkins-image

4、启动成功后停止容器,删除挂载的工作目录下的所有文件

rm -rf /home/jenkins/data/*

5、将原来压缩好的 Jenkins 工作目录解压至上一步容器挂载的工作目录下

cd /home/jenkins/data/
# 解压至当前目录下
tar -zxvf ~/jenkins_home.tar

6、启动刚刚停止的 Jenkins 容器,用户名和密码都还是原来的,至此迁移完成。

二、完整迁移方法(包含容器)

0、先将工作目录压缩后传到目标机器上,参照上方快速迁移方法的1、2步

1、查看容器运行状态

docker ps -a
d796453c4ca1   jenkins:1.0   "/sbin/tini -- /usr/…"   11 months ago   Up 6 hours     0.0.0.0:50000->50000/tcp, :::50000->50000/tcp, 0.0.0.0:8010->8080/tcp, :::8010->8080/tcp                                             jenkins
# ps:我这个容器是在在启动jenkins时就把工作目录挂载到宿主机上了,如果没有挂载,请进入容器,默认的工作目录是:/var/jenkins_home。

2、执行 docker commit 命令将容器保存为镜像

docker commit jenkins(容器名)  jenkins-image(镜像名)

3、查看镜像 docker images

REPOSITORY            TAG                IMAGE ID       CREATED         SIZE
jenkins-image        latest             4a12d5121f83   6 hours ago     3.59GB

4、将镜像保存为压缩文件 docker save

docker save -o jenkins.tar(文件名) jenkins-image(镜像名)

5、将压缩好的tar文件移到新机器

#通过 scp 命令直接发送到新机器中,或者push 到 DockerHub 在 Pull到目标机器
#执行 docker load 将文件导入为镜像
docker load -i jenkins.tar(文件名)

6、创建 Jenkins 工作目录并赋予权限

mkdir -p /home/jenkins/data/jenkins_home/
#设置目录权限
chmod -R 777 /home/jenkins/
#给docker.sock授予权限
chmod 777 /var/run/docker.sock

7、执行命令启动 Jenkins

docker run -d --privileged=true \
--name jenkins-hercules -p 8010:8080 -p 50000:50000 \
--restart=always \
-v /home/jenkins/data/jenkins_home:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /usr/bin/docker:/usr/bin/docker \
-v /etc/localtime:/etc/localtime \
--user root \
jenkins-image

8、参照上方快速迁移方法的4、5、6步将原来的工作目录替换掉现在的即可。

PS:

1、本来我认为保存了整个容器应该将原有的配置内容也都保存了,但启动后我访问 Jenkins 还是让我执行初始化的那些步骤,原来的配置都没了,暂时还没研究是什么原因导致,所以建议直接用快速迁移方法即可。

2、如果你的 Jenkins 跑了很多流水线的话,实际上你要按照第二种方式备份你的镜像文件是巨大的,我这个将近 15GB 。通过删掉一些不必要的东西如:代码编译后的 Jar、缓存文件夹、maven仓库、npm软件包(前两个在工作目录下,后两个在容器的 root目录下,为隐藏文件夹,可通过 du -sh .[!.]* 显示隐藏目录)。清理后打包容器为镜像后还有 3.4G,如果服务器不是内网有带宽限制会导致文件传输巨慢,浪费时间。