Jenkins 备份还原
一、简介
在部署完 Jenkins 后首先要准备的就是数据备份问题,尤其是在生产环境下的 Jenkins,如果数据丢失很可能导致项目上线和开发时间受到影响,所以备份数据很重要。还好,Jnekins 中存在数据备份插件 ThinBackup,方便我们通过界面化方式对数据进行备份与恢复。
背景,需要把Jenkins 迁移到另外一台服务器。
二、安装 ThinBackup 插件
Jenkins通过插件ThinBackup来完成自身的备份与恢复。
2.1.插件安装
插件管理直接搜索ThinBackup安装。
安装完成,空闲时重启下。
安装完成
2.2.Settings 备份设置
设置每日凌晨1点执行备份,备份包保存30天。
2.2.1、服务器上先创建备份目录
1 | mkdir -p /data/backup/jenkins |
2.2.2、设置备份
完整备份写计划任务时,和传统的crontab 计划任务写法有些区别
如果写成 0 1 * * *
根据提示修改就行
2.3、查看备份
1 | $ pwd |
三、恢复备份
3.1 新服务器安装Jenkins
1 | # 安装java |
- 访问Jenkins IP:8080 按照提示安装
选项
1 | # 如果java是二进制安装,目录不一样,则需要修改配置文件 |
3.2 java 版本问题
启动Jenkins 报错
报错:java版本不符
java jkd 11 版本也试过,也会报错,忘记记录了。这边建议使用 java-11-openjdk
3.3 安装插件ThinBackup
上面有写、以及相关设置
四、恢复数据
4.1 拷贝数据、
把备份zip包或者备份时间戳的文件夹,拷贝到新Jenkins的备份路径下/data/backup/jenkins
4.2 操作恢复
登入新的 Jenkins后台
Restore Configuration
五、碰到的问题
5.1 账号密码登入不上
原因,源Jenkins 用的是 ldap 来管理账号密码,Thinbackup 备份的config.xml中ldap密码凭据是之前按旧服务器的,所以我们的重新生成。
思路:
- 1、备份config.xml (旧Jenkins还原的)
- 2、用访客登入到管理后台,重新设置连接下ldap
- 3、Jenkins 配置文件config.xml 会生成新的密码串。
- 4、把新的密码串换到刚刚备份的 config.xml
- 5、还原config.xml文件,重启解决问题。
1 | # Thinbackup 还原后,备份配置文件 |
进入系统配置ldap
1 | # 配置完ldap |
用户正常登入和策略都正常了
5.2 凭据失效
因为Jenkins Thinbackup 备份的凭据换一台服务器会无效,所以我们的把所有凭据账号密码都要重新输入密码保存下。
5.3. 反向代理设置有误
jenkins报:反向代理设置有误
系统管理->系统设置->Jenkins URL 改成新服务器的监听地址
5.4、更新插件
系统管理→”插件管理”,更新出现以上错误的组件即可。
插件更新完成,所有报错消失
六、业务报错
6.1、无法加载环境
What do you want to do? You're able to run, edit, delete or create new scripts from here. If you select a script to be executed, you'll be able to select the node where you would like it to run.
The scripts are saved at:
/var/lib/jenkins/scriptler/scripts
Currently you do not have any scripts available. You can import scripts from a remote catalog or create your own.
解决
1 | cat /var/lib/jenkins/scriptler/scriptler.xml |
6.2、安装依赖(可选根据自己业务)
这边需要安装node 两个版本
下载二进制包
1 | tar -xvf node-v14.15.4-linux-x64.tar.xz -C /usr/local/ |
6.2.1 加载node变量报错
/var/lib/jenkins/workspace/mdd-nuxt-index@2@tmp/durable-7f7f445b/script.sh: line 2: /etc/profile.d/node14.sh: No such file or directory
对应的脚本也要拷贝过去
1 | cat node14.sh |
6.2.2 yarn 未装报错
/var/lib/jenkins/workspace/mdd-nuxt-index@2@tmp/durable-02e989cb/script.sh: line 3: yarn: command not found
1 | source /etc/profile.d/node14.sh |
6.3、docker 权限报错
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock
解决
1 | chmod 655 /var/run/docker.sock |
七、其他
7.1 修改端口
7.1.1 修改1
1 | vim /usr/lib/systemd/system/jenkins.service |
7.1.2 修改2
1 | vim /etc/sysconfig/jenkins |
7.1.3 修改3
1 | vim /usr/lib/firewalld/services/jenkins.xml |
7.1.4 修改4
重新加载配置文件
1 | systemctl daemon-reload |
7.2 修改用户 (可选)
使用Jenkins用户比较安全,但对应环境复杂,需要调用大量外部接口的,建议使用root
1 | vim /usr/lib/systemd/system/jenkins.service |