前几天由于某些原因,新搞了一个jenkins实例,需要和老的机器具备相同的能力。
也就是说需要将老的jenkins实例上的大概200多个job同步到新的jenkins实例上。
下面是整个迁移的过程,如果你有更好的迁移方案,欢迎你在评论区或者后台交流分享,共同提高。
0. 方案确定
200多个job一方面是太多了,一个个重新建太费时,另一方面也担心建错。
所以就就想看下有没有整体迁移的方案可以来实施,网上查了一下大概有两种方式。
- 插件:job-import-plugin
- 同步jobs目录
这里采用的是第二种方案即同步jobs目录
# tree jenkins -L 1
jenkins
省略n多
|-- jobs
|-- logs
|-- nodes
|-- plugins
省略n多
`-- workspace
也就是同步老jenkins实例jenkins主目录下的jobs到新的jenkins实例的jenkins主目录下。
不知道的jenkins主目录的可以到
系统管理-》系统设置-》主目录
里查看,或者通过浏览器访问http://ip:port/configure
里查看。
基本上就是先压缩老jenkins实例jenkins主目录下的jobs
目录,然后再复制压缩之后的文件到新jenkins实例的jenkins主目录下、解压,然后重启服务。
1. 压缩jobs目录
1.1 初次压缩
# tar -czvf jobs-bak.tar.gz jobs
但是执行完这个命令之后迟迟没有结束,感觉不太对劲。第一反应是不是文件太多或者太大。所以赶紧取消了命令的执行,使用了下面的命令来看下目录的大小。
# du sh
经过了比较长的等待后结果回来了,发现整个目录近47G大,然后就想看下具体是哪些job的目录会比较大。
# du -m --max-depth=1 | sort -nr
再次经过了比较长的等待后结果出来了。
48472 .
35347 ./a
6968 ./b
971 ./c
省略n多目录
1.2 移除过多的历史构建记录之后再次压缩
然后就是清理这些多余的文件,为了清理这些过多的文件还差点整出了一个生产事故,具体参考我的上一篇博文Jenkins开启丢弃旧的构建?你可要小心啊!
在最终清理完这些文件之后再次压缩,这个时候压缩后得到的文件小多了。
# tar -czvf jobs-bak.tar.gz jobs
# du -sh jobs-bak.tar.gz
123M jobs-bak.tar.gz
2. 远程拷贝
# scp -f obs-bak.tar.gz root@JenkinsBip:/data/jenkins/
3. 登陆目标机器解压
# tar -zxvf jobs-bak.tar.gz -C jobs
4. 加载jobs
解压之后拷贝的job并不会立即生效,需要通过jenkins的 系统管理=》读取设置
相关的功能来加载拷贝过来的job。
另外也可以通过重启服务来让这些job生效。
# systemctl restart jenkins
5. 经验教训
总结一下本次得到的教训
我们在进行job迁移之前需要先移除过多的历史构建记录,只保留少量的历史构建记录,来保证在源机器和目标机器之间传递的数据尽量小,以减少数据压缩传输耗时,提高迁移效率。
另外就是确保job依赖的插件都要在新的机器上安装,否则迁移过来的job运行时会有问题。