公司内使用的 GitLab 服务部署于几年前,系统及其组件版本老旧,因稳定性等因素考虑进行迁移并跨版本升级。
迁移
准备工作
检查当前版本
# yum list | grep gitlab-ce
gitlab-ce.x86_64 8.6.10-ce.1.el7 @gitlab-ce
注意:此步骤非常重要,因为 GitLab 的数据备份/恢复过程必须版本一致,否则将无法恢复。
全量备份
# gitlab-rake gitlab:backup:create
执行此操作后会在 /var/opt/gitlab/backups
文件夹内生成带时间戳的备份文件,将此文件导出到本地或者传送到新机器上。
环境恢复
极力推荐 GitLab 服务器专机专用,公司的私有代码是公司的命脉,也是最重要的生产工具,因此不推荐与线上服务或其他服务部署在一起,且 GitLab 对机器性能要求并不低,官方推荐配置最少4G内存。
注意:恢复环境时必须与之前的版本一致,否则备份文件无法进行还原。
安装依赖包
在 CentOS / RadHat 中安装 SSH 服务(克隆代码需要)并配置防火墙放行端口
# yum install -y curl policycoreutils-python openssh-server
# systemctl enable sshd
# systemctl start sshd
# firewall-cmd --permanent --add-service=http
# systemctl reload firewalld
配置邮件服务,系统邮件将使用此程序进行发送,SMTP 服务配置方法请查看此处。
# yum install postfix
# systemctl enable postfix
# systemctl start postfix
配置仓库并安装
# vim /etc/yum.repos.d/gitlab-ce.repo
注意:本文使用的仓库为清华源,按量付费机器请谨慎使用,海外机器请使用官方源。
贴入以下内容
[gitlab-ce]
name=Gitlab CE Repository
baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/
gpgcheck=0
enabled=1
安装 GitLab 指定版本(与备份文件的版本一致)
# yum install gitlab-ce-x.x.x
提示:具体版本号可以到清华源中进行查询。
数据恢复
# gitlab-rake gitlab:backup:restore BACKUP=时间戳
注意:备份的文件名类似于 1873673794_2018_12_11_gitlab_backup.tar
,前面的部分就是时间戳,恢复命令后仅需接时间戳(即 _gitlab_backup 前的部分)即可。
常用指令
GitLab 常用命令
# gitlab-ctl start # 启动所有组件;
# gitlab-ctl stop # 停止所有组件;
# gitlab-ctl restart # 重启所有组件;
# gitlab-ctl status # 查看服务状态;
# gitlab-ctl reconfigure # 重载配置;
# /etc/gitlab/gitlab.rb # 默认的配置文件;
$ gitlab-rake gitlab:check SANITIZE=true --trace # 检查 GitLab;
# gitlab-ctl tail # 查看日志;
跨版本升级
务必升级前先进行备份,谨记!然后将备份传送至安全地址保留。
由于 GitLab 无法跨版本进行升级,只能按照版本先后顺序进行升级操作。且部分配置会丢失。
因此先执行备份操作
# gitlab-rake gitlab:backup:create
且备份 /etc/gitlab/gitlab.rb
配置文件,无法直接替换,需要提取其中部分配置。
必须按照先后顺序升级到当前大版本的最新版,然后升级到下一个大版本号。
- 升级过程中每次升级一个版本都需要打开网页端查看是否可用,若出现 5xx 提示,则需要执行重载配置命令后重试。
- 切记必须保证升级每个版本后能正确访问及使用后再升级下个版本。
- 每个大版本的最新版可以到清华源中进行搜索。
已知版本参考表
大版本号 | 更新状态 | 已知版本 |
---|---|---|
8 | 完结 | 8.17.8 |
9 | 完结 | 9.5.9 |
10 | 完结 | 10.8.7 |
11 | 进行中 | / |
常见问题
[ERROR] OpenSSL::Cipher::CipherError (bad decrypt):
# gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"
[ERROR] Error executing action
runon resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]'
# chmod -R 2770 /var/opt/gitlab/git-data
附录
参考链接
本文由 柒 创作,采用 知识共享署名4.0
国际许可协议进行许可。
转载本站文章前请注明出处,文章作者保留所有权限。
最后编辑时间: 2023-12-06 16:22 PM
一顿烧操作 看不懂