将redhat6.8下面的gitlab 8.8.9迁移到centos7.6并升级到gitlab 12.1.4版本

  项目原本使用的是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);

整体升级步骤:

  1. 先将老的gitlab进行备份(使用命令:gitlab-rake gitlab:backup:create),在centos7.6上面安装gitlab 8.8.9版本,并使用前面的备份文件恢复服务,接下来使用同版本依次升级的形式升级到gitlab 12.1.4版本,具体操作方式可参考https://www.jianshu.com/p/6a06361eec34;
  2. 将老的gitlab所在服务器/etc/gitlab目录下面的gitlab.rb和gitlab-secrets.json手动备份备用;
  3. 通知所有gitlab用户停止使用gitlab服务,确保大家已经暂停使用gitlab服务;
  4. 考虑到第1步会耗费不少时间,中间会有新的gitlab提交,所以这里要将老的gitlab再进行一次完整备份,以便应对特殊情况;
  5. 使用写好的脚本将老的gitlab服务新增部分同步到新的gitlab服务上;
  6. 在新的gitlab上备份整个gitlab库;
  7. 通知所有gitlab用户,切换到新的gitlab服务;
  8. 配置gitlab邮箱;

部分步骤补充说明

gitlab同版本依次升级操作说明如下:

  1. 先从https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/网站依次下载需要的rpm安装包(可实际查看版本,下载每个大版本的最后一个版本);
  2. 在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
  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增量更新部分

下面说明一下整体的实现思路,具体实现方式我也还在完善中。

  1. 考虑到gitlab版本不同,所以不能直接通过备份恢复的方式进行整体同步,所以可以考虑调用gitlab api实现或使用git客户端间接实现,gitlab api的使用可以参考官方文档(可在gitlab服务网页的帮助入口找到),这两个网址也可以实际参考一下,https://www.jianshu.com/p/6a06361eec34 和https://blog.csdn.net/xie_0723/article/details/75215869;
  2. 实际研究了一下,最后决定结合两种方式实现,使用gitlab api获取所有的gitlab工程及branch信息,然后依次对所有gitlab工程执行下述操作:
    (1)使用git clone命令将远程gitlab工程指定分支拉取到本地;
    (2)依次执行下面的两条命令,切换到新的gitlab远程地址
      git remote rm origin
      # 样式“git remote add origin 你的新远程仓库地址”,例子如下:
      git remote add origin [email protected]:frontend/example.git
    (3)调用下面的命令,将本地代码同步到远端服务器
      git push --all origin

关于gitlab参数

配置文件路径为/etc/gitlab/gitlab.rb,下面依次说明一下相关配置。(如果配置有调整,需要依次执行 gitlab-ctl stop,gitlab-ctl reconfigure, gitlab-ctl restart命令重启服务才能生效)

  1. 邮箱配置(官网参考: 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’] = “[email protected]
    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’] = “[email protected]
  2. 外部访问url配置
    external_url ‘http://gitlab.app.com’
  3. 备份配置,可根据需要定制备份存放目录和保留时长
    gitlab_rails[‘manage_backup_path’] = true
    gitlab_rails[‘backup_path’] = “/data/gitlab/backups”
    gitlab_rails[‘backup_keep_time’] = 172800
  4. 数据存放目录,用于自定义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(‘[email protected]’, ‘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 [email protected]:/data/gitlab/backups

你可能感兴趣的:(git,gitlab,linux)