背景

这里打补丁是指,版本号的第三位更新,如8.14.0->8.14.2等,这里只是更新patch,所以会有部分不同于升级Gitlab CE的版本号

这里也有官方的文档,实际操作过程中有点出入,以8.14.0升级到8.14.2为背景做一份记录,

过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 首先备份一下是没有错的
$ cd /home/git/gitlab
$ sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

# 关掉服务
$ sudo service gitlab stop

# 拉最新的branch
$ sudo -u git -H git fetch --all
$ sudo -u git -H git checkout -- Gemfile.lock db/schema.rb
$ sudo -u git -H git checkout v8.14.2 -b v8.14.2

# 切换gitlab-shell为最新对应版本
$ cd /home/git/gitlab-shell
$ sudo -u git -H git fetch
$ sudo -u git -H git checkout v`cat /home/git/gitlab/GITLAB_SHELL_VERSION` -b v`cat /home/git/gitlab/GITLAB_SHELL_VERSION`

# 更新workhorse到相应版本
$ cd /home/git/gitlab
$ sudo -u git -H bundle exec rake "gitlab:workhorse:install[/home/git/gitlab-workhorse]" RAILS_ENV=production

进行到这一步的时候可能会出现提示,说gem缺失,这里官网没有说,所以要执行一下gem install

1
$ sudo -u git -H tsocks bundle install --without development test mysql --deployment

这里的tsocks为使用代理的命令,如果连接了VPN就不需要了,相关内容可以查看proxy相关内容,然后再次执行刚才的命令。

如果还有错误,就要尝试用下面这个方法了,v1.0.1是gitlab/GITLAB_WORKHORSE_VERSION里面指定的VERSION

1
2
3
4
$ cd /home/git/gitlab-workhorse
$ sudo -u git -H git fetch --all
$ sudo -u git -H git checkout v1.0.1
$ sudo -u git -H make

这样就可以了。然后

1
2
3
4
5
6
7
8
9
$ cd /home/git/gitlab
# 如果之前那一步已经运行过了就不用了
$ sudo -u git -H tsocks bundle install --without development test mysql --deployment
# 下面这一条可选
$ sudo -u git -H bundle clean
# 数据库更新
$ sudo -u git -H bundle exec rake db:migrate RAILS_ENV=production
# 静态数据和缓存更新,这一步会比较久
$ sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production

这样就完成了,然后重启一下相关服务

1
2
$ sudo service gitlab start
$ sudo service nginx restart

最后检查一下,

1
2
3
4
# 检查相关环境
$ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
# 检查运行情况
$ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

如果一片绿色,说明完成了。

一些说明

这个官方文档最后没有写升级失败了怎么办,不过办法应该和版本升级差不多,就是找前一个版本到这个版本的升级DOC,比如我如果这次升级失败了,那我就把最开始备份的恢复一下,然后找8.13到8.14的升级DOC来一遍。没有实践过,但是应该是没问题的。