之前写了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

其他意见

故障排除