项目原本使用的是gitlab 8.8.9,操作系统是redhat 6.8,鉴于gitlab版本较老,所以想升级到最新的gitlab 12.1.4版本。实际研究了一下,升级gitlab版本,操作起来有些复杂,直接在老的机器上升级风险太大,稳妥起见,另外找了一台centos7.6的服务器,打算先将gitlab服务迁移到服务器,然后升级到gitlab 12.1.4版本,验证好之后,再直接迁移到老的redhat 6.8服务器上(实际操作过程中发现redhat 6.8系统下面安装gitlab12.1.4存在难以解决的技术问题,最后只能直接使用centos7.6的服务器)。为了简化描述,后续内容中,将redhat 6.8服务器下面的gitlab 8.8.9简称老的gitlab(gitlab 8.8.9),将centos7.6服务器下面的gitlab 12.1.4简称新的gitlab(gitlab 12.1.4);
整体升级步骤:
- 先将老的gitlab进行备份(使用命令:gitlab-rake gitlab:backup:create),在centos7.6上面安装gitlab 8.8.9版本,并使用前面的备份文件恢复服务,接下来使用同版本依次升级的形式升级到gitlab 12.1.4版本,具体操作方式可参考https://www.jianshu.com/p/6a06361eec34;
- 将老的gitlab所在服务器/etc/gitlab目录下面的gitlab.rb和gitlab-secrets.json手动备份备用;
- 通知所有gitlab用户停止使用gitlab服务,确保大家已经暂停使用gitlab服务;
- 考虑到第1步会耗费不少时间,中间会有新的gitlab提交,所以这里要将老的gitlab再进行一次完整备份,以便应对特殊情况;
- 使用写好的脚本将老的gitlab服务新增部分同步到新的gitlab服务上;
- 在新的gitlab上备份整个gitlab库;
- 通知所有gitlab用户,切换到新的gitlab服务;
- 配置gitlab邮箱;
部分步骤补充说明
gitlab同版本依次升级操作说明如下:
- 先从https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/网站依次下载需要的rpm安装包(可实际查看版本,下载每个大版本的最后一个版本);
- 在centos7.6服务器上执行下面操作进行gitlab安装及配置:
rpm -Uvh gitlab-ce-8.8.9-ce.0.el7.x86_64.rpm
gitlab-ctl reconfigure
gitlab-ctl stop
中间的操作详情请参考https://www.jianshu.com/p/6a06361eec34,这里只是对重点进行记录;
样式为#gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
下面是样例:
gitlab-rake gitlab:backup:restore BACKUP=1502357536_2017_08_10_9.4.3 - 依次执行同版本升级命令,每执行完一次升级,需要确认是否有报错,另外使用浏览器登录到gitlab查看是否功能正常:
rpm -Uvh gitlab-ce-8.17.8-ce.0.el7.x86_64.rpm
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-ctl stop
rpm -Uvh gitlab-ce-9.5.9-ce.0.el7.x86_64.rpm
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-ctl stop
rpm -Uvh gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm
gitlab-ctl restart
gitlab-ctl stop
rpm -Uvh gitlab-ce-11.11.7-ce.0.el7.x86_64.rpm
gitlab-ctl restart
gitlab-ctl stop
rpm -Uvh gitlab-ce-12.1.4-ce.0.el7.x86_64.rpm
gitlab-ctl restart
关于同步gitlab增量更新部分
下面说明一下整体的实现思路,具体实现方式我也还在完善中。
- 考虑到gitlab版本不同,所以不能直接通过备份恢复的方式进行整体同步,所以可以考虑调用gitlab api实现或使用git客户端间接实现,gitlab api的使用可以参考官方文档(可在gitlab服务网页的帮助入口找到),这两个网址也可以实际参考一下,https://www.jianshu.com/p/6a06361eec34 和https://blog.csdn.net/xie_0723/article/details/75215869;
- 实际研究了一下,最后决定结合两种方式实现,使用gitlab api获取所有的gitlab工程及branch信息,然后依次对所有gitlab工程执行下述操作:
(1)使用git clone命令将远程gitlab工程指定分支拉取到本地;
(2)依次执行下面的两条命令,切换到新的gitlab远程地址
git remote rm origin
# 样式“git remote add origin 你的新远程仓库地址”,例子如下:
git remote add origin git@192.168.23.210:frontend/example.git
(3)调用下面的命令,将本地代码同步到远端服务器
git push --all origin
关于gitlab参数
配置文件路径为/etc/gitlab/gitlab.rb,下面依次说明一下相关配置。(如果配置有调整,需要依次执行 gitlab-ctl stop,gitlab-ctl reconfigure, gitlab-ctl restart命令重启服务才能生效)
- 邮箱配置(官网参考: https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/smtp.md#smtp-settings)
下面罗列了阿里云邮箱配置(/etc/),仅供参考:
gitlab_rails[‘smtp_enable’] = true
gitlab_rails[‘smtp_address’] = “smtp.mxhichina.com”
gitlab_rails[‘smtp_port’] = 465
gitlab_rails[‘smtp_user_name’] = “gitlab@company.com”
gitlab_rails[‘smtp_password’] = “margin-Top”
gitlab_rails[‘smtp_domain’] = “mxhichina.com”
gitlab_rails[‘smtp_authentication’] = “login”
gitlab_rails[‘smtp_enable_starttls_auto’] = true
gitlab_rails[‘smtp_tls’] = true
gitlab_rails[‘gitlab_email_from’] = “gitlab@company.com” - 外部访问url配置
external_url ‘http://gitlab.app.com’ - 备份配置,可根据需要定制备份存放目录和保留时长
gitlab_rails[‘manage_backup_path’] = true
gitlab_rails[‘backup_path’] = “/data/gitlab/backups”
gitlab_rails[‘backup_keep_time’] = 172800 - 数据存放目录,用于自定义gitlab数据存放位置
git_data_dirs({
“default” => {
“path” => “/data/gitlab/git-data”,
“failure_count_threshold” => 10,
“failure_wait_time” => 30,
“failure_reset_time” => 1800,
“storage_timeout” => 30
}
})
验证邮箱配置
执行 gitlab-rails console进入控制台。 然后在控制台提示符后输入下面的命令 发送一封测试邮件:Notify.test_email(‘收件人邮箱’, ‘邮件标题’, ‘邮件正文’).deliver_now
例子:Notify.test_email(‘caifh@tianxiaxinyong.com’, ‘Message Subject’, ‘Message Body’).deliver_now
http://api.rubyonrails.org/classes/ActionMailer/Base.html
其他
查看gitlab版本号命令
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
scp远程拷贝命令例子:
scp /data/gitlab/backups/1565202777_gitlab_backup.tar root@192.168.12.22:/data/gitlab/backups