Gitlab迁移升级记录

之前写了gitlab的安装文档,目的是为了为迁移做准备,现在记录一下测试迁移的过程。现在需要将编译安装的7.13.4版本的gitlab升级至10.6.0并采用docker的方式运行。经查阅官方Docker【版本】9.5.1-10.7.0。而在Github上【sameersbn版本】v6.1-v10.6.4。另外
还有Gitlab的【官方升级说明】,这个说明里面都是临近的版本升级说明,但并没有介绍大跨度升级的详细内容。最后决定采用github上提供的升级建议。记录说明如下

迁移升级步骤

  • 思路:

    概览:从7.13.4–>8.0.3–>10.6.0

    A. 先迁移至同版本的Docker容器中
    B. 利用Docker易于部署的特性将Gitlab升级至指定版本
    C. 使用了【sameersbn提供的方法】

  • 拉取Docker版本的7.13.4

    1
    2
    3
    4
    5
    docker pull sameersbn/gitlab:7.13.4
    #docker pull sameersbn/gitlab:latest
    cd docker-gitlab #获取对应版本docker compose配置
    git clone https://github.com/sameersbn/docker-gitlab.git
    #docker build --tag=$USER/gitlab .
  • 使用docker-compose启动gitlab

    1
    2
    3
    4
    pip install docker-compose
    #进入docker compose同级目录执行up命令
    docker-compose up -d
    #docker-compose down
  • 还原gitlab到7.13.4

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    docker ps -a
    cp /gitlab_bak/1523732410_gitlab_backup.tar /srv/docker/gitlab/gitlab/backups/ #copy 备份数据到docker里backup目录
    docker exec -it docker-gitlab_gitlab_1 /bin/bash #进入容器
    #容器内部使用了supervisor 先停止gitlab服务
    supervisor> stop sidekiq
    sidekiq: stopped
    supervisor> stop unicorn
    unicorn: stopped
    #修改权限
    chown -R git.git /home/git/
    chown -R git.git /home/git/data/backups/1525501269_gitlab_backup.tar
    chown -R git.git /var/log/gitlab/gitlab-shell/gitlab-shell.log
    su git
    #
    bundle exec rake gitlab:check SANITIZE=true #确认状态无误,导入需确认API和Running状态为关闭
    bundle exec rake gitlab:backup:restore RAILS_ENV=production #还原操作
  • 至此还原已经完成了,开始升级操作

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #每次升级之后做一下备份
    sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
    #使用compose更新版本
    git branch
    git checkout .
    git clean -df
    git checkout v8.0.3
    mv docker-compose.yml.dist docker-compose.yml
    docker-compose up -d
    #backup again
    docker-compose down
    git checkout 10.6.0
    docker-compose up -d

特别说明

我这里最后并没有升级至10.6.0,最后决定使用原版本只是迁移到docker有两点需要注意

  • 1.数据目录权限如果这个有问题会出现能看到repository的commit等信息,却提示repository不存在

    1
    2
    #更改repository所在目录的权限即可
    chown -R git.git /home/git/data/repositories
  • 2.迁移key,将原gitlab的auth key迁移到新gitlab的auth key位置,注意command

    1
    2
    3
    4
    5
    #提示:可以先手动创建一个就知道该如何写这个command了
    原key:/var/opt/gitlab/.ssh/authorized_keys
    command="/opt/gitlab/embedded/service/gitlab-shell/bin/gitlab-shell key-58",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A6dKlEgfVl3G16f5v test@bogon
    现key:/home/git/data/.ssh/authorized_keys
    command="/home/git/gitlab-shell/bin/gitlab-shell key-59",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa A6dKlEgfVl3G16f5v test@bogon

官方建议

官方提供了3种Gitlab的安装方法,根据安装方法的不同需要选取不同的迁移升级策略。三种安装方式分别如下【除了源码安装其他的安装方法在我之前的一篇博客里已经记录了】

  • Omnibus Packages
  • Source installation
  • Docker installation

关于如何还原备份【文档地址】
主要参照官方吧,我这里不再详细说了。简单记录一点我看到的
从9.1.0版本开始满足以下条件可以实现升级到新版本而不必停止Gitlab服务

  • 只能一次升级一个小版本,如:9.1到9.2,不能9.1到9.3

从9.2.开始备份文件的时间戳发生了变化

In GitLab 9.2 the timestamp format was changed from EPOCH_YYYY_MM_DD to EPOCH_YYYY_MM_DD_GitLab version, for example 1493107454_2017_04_25 would become 1493107454_2017_04_25_9.1.0

其他意见

故障排除