gitlab 升级(从8到12) 迁移(docker-compose部署)

搞一次gitlab的升级,事后回想感觉好easy,但是中间折腾的过程,让我感觉陪唐僧取了趟经~ 因为我操作之前忘记备份,然后也不知道要一个一个版本的升级, 直接升级版本号8->12,数据库升级失败了,也没有回滚。。。。?

说多了都是泪,直奔主题吧。

git升级

原来的gitlab项目很老  不过也是通过docker-compose部署的。部署文件docker-compose.yml内容如下:

web:
    image: 'gitlab/gitlab-ce:8.10.3-ce.0'
    restart: always
    environment:
        GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://git.domain.com'
            gitlab_rails['lfs_enabled'] = true
            gitlab_rails['gitlab_shell_ssh_port'] = 22
    ports:
        - "80:80"
        - "22:22"
    volumes:
        - "/data/gitlab/config:/etc/gitlab"
        - "/data/gitlab/logs:/var/log/gitlab"
        - "/data/gitlab/data:/var/opt/gitlab"

如有dns的搞个解析,把git.domain.com(可以换成任意自己可用的)解析到当前机器,没有条件的时候,可用用绑定host的形式来临时解决访问问题。

查阅资料, 可知gitlab的升级不能跨越大版本,只能先升级到当前大版本的最新版 然后再升级到下个版本的最新版。 

按照这个思路,当前版本为8.10.3,查阅docker hub(传送门)可以得知, 升级路线为: 8.10.3 -> 8.17.8 -> 9.5.10 -> 10.8.7 -> 11.11.8 -> 12.4.0。

老规矩,动手升级gitlab之前先做备份:

#进入docker-compose.yml所在的文件加
cd /data/docker/docker-gitlab

#便于操作,给命令docker-compose起个别名
alias dc="docker-compose"
#进入docker 容器内
dc exec web bash
# 停掉数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

#开始备份, 需要的时间会比较长
gitlab-rake gitlab:backup:create

#对应的恢复命令,暂且用不到:
# gitlab-rake gitlab:backup:restore BACKUP=备份编号
#查看恢复状态,暂且用不到:
# gitlab-rake gitlab:check SANITIZE=true

#恢复数据连接服务
gitlab-ctl start unicorn
gitlab-ctl start sidekiq

备份完成后,关闭gitlab服务

#进入docker-compose.yml所在的文件加
cd /data/docker/docker-gitlab
dc down

(请注意这里是重复步骤的开始)

修改docker-compose.yml, 升级镜像的tag为下一个版本号,如当前是8.10.3, 则要升级的目标版本应该是8.17.8:

web:
    image: 'gitlab/gitlab-ce:8.17.8-ce.0'
    restart: always
    environment:
        GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://git.domain.com'
            gitlab_rails['lfs_enabled'] = true
            gitlab_rails['gitlab_shell_ssh_port'] = 22
    ports:
        - "80:80"
        - "22:22"
    volumes:
        - "/data/gitlab/config:/etc/gitlab"
        - "/data/gitlab/logs:/var/log/gitlab"
        - "/data/gitlab/data:/var/opt/gitlab"

修改完毕后 启动项目

#启动
dc up -d

#查看日志
dc logs -f

尝试访问 http://git.domain.com, 不断刷新,刚开始会出现 无法访问, 再等一会儿 会报 502, 一般来说,再等等就能访问了(只要日志里没有报错),有的时候 等的时候太长,也可以考虑重新启动一下服务。

启动正常后,这个版本升级 就算成功了。

循环上面的升级操作,直至最高版本。

升级完成后可能遇到的问题:

admin runner 500

#进入容器
dc exec web bash

#进入后
root@gitlab:/# gitlab-rails console
-------------------------------------------------------------------------------------
 GitLab:       11.5.1 (c90ae59)
 GitLab Shell: 8.4.1
 postgresql:   9.6.8
-------------------------------------------------------------------------------------
Both Deployment and its :status machine have defined a different default for "status". Use only one or the other for defining defaults to avoid unexpected behaviors.
Loading production environment (Rails 4.2.10)
irb(main):001:0> ApplicationSetting.current.reset_runners_registration_token!
=> true
irb(main):002:0> 

操作完毕后,重新启动一下服务

dc down

dc up -d 

启动后,再次刷新页面,应该能恢复正常。

心得:

/data/gitlab/data/git-data/repositories 下存储的是项目真正的代码库,但是网页上能看到的项目组、项目,以及用户和权限信息都是存在数据库(postgresql)中。 所以如果没有代码库的配置如果没有变化,如果用户相关信息没有变化,也可以直接替换repositories下的数据(适用于 项目清单没有差异,但是可能某一个或多个项目中 有代码差异的情况)

参考文档:

gitlab的升级、备份  https://blog.51cto.com/13767724/2390552?source=dra

gitlab版本升级并docker化 https://www.jianshu.com/p/f836c3b867f8

你可能感兴趣的:(docker,docker-compose,gitlab)