一、确定当前版本
#进入当前版本容器产看gitlab版本
docker exec -it gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
#显示版本如下
14.4.0
二、备份数据,防止升级发生意外
#执行备份命令
docker exec -ti gitlab gitlab-rake gitlab:backup:create
#在持久化目录查看备份情况
ll /opt/gitlab/data/backups/
-rw------- 1 998 docker 342722560 6月 5 02:18 1654366714_2022_06_04_14.4.0_gitlab_backup.tar
-rw------- 1 998 docker 559196160 6月 11 22:40 1654958434_2022_06_11_14.4.0_gitlab_backup.tar
三、确定升级路线
docker环境部署gitlab的升级很简单,直接基于高版本的镜像运行容器即可;
需要注意的是gitlab的升级不能跨大版本升级,详见升级路径:
https://docs.gitlab.com/ee/update/index.html#upgrade-paths
可在此链接查看gitlab-ce的docker全部镜像:
https://hub.docker.com/r/gitlab/gitlab-ce/
升级路线图如下;
从14.4.0版本升级到16.Y.Z版本升级路线图为
14.4.0->14.6.2->14.9.5-> 14.10.4->15.0.2->15.1.0->15.4.0->15.6.1->15.8.0->15.9.0->15.11.0->16.0.1->16.0.8->16.1.5->16.3.6->16.7.3->16.Y.Z->
四、升级(共分4个版本升级)
1.14.4.0->14.6.2
#为了防止升级过程ssh终端造成问题,启用终端复用器tmux, 执行升级操作
#停止gitllab服务
docker stop gitlab && docker rm gitlab
#执行升级命令
docker run -d --restart=always -p 9980:9980 -p 10022:22 --name gitlab_15_9 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://IP:9980/'; gitlab_rails['lfs_enabled'] = true;" -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.6.2-ce.0
#查看升级日志,约10分钟左右升级成功
docker logs -f gitlab
2.14.6.2->14.9.5
#停止gitllab服务
docker stop gitlab && docker rm gitlab
#执行升级命令
docker run -d --restart=always -p 9980:9980 -p 10022:22 --name gitlab_15_9 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://IP:9980/'; gitlab_rails['lfs_enabled'] = true;" -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.9.5-ce.0
#查看升级日志,约10分钟左右升级成功
docker logs -f gitlab
从 GitLab 16开始就不支持 PostgreSQL 12。在升级到 GitLab 16.0或更高版本之前,至少将 PostgreSQL 升级到13.6版本。
要将Docker中的GitLab 15.11.0升级到16.0.1,并将容器内的PostgreSQL升级到13.6版本,请按照以下步骤操作:
升级到15.11.0版本后
docker exec -it <容器> /bin/bash
查看PostgreSQL版本
/opt/gitlab/embedded/bin/postgres --version
升级到PostgreSQL13.0以上
gitlab-ctl pg-upgrade -V 13
若提示报错: /var/opt/gitlab/postgresql/data.13 is not empty. Move or delete this directory to proceed with upgrade
把data.13删除即可:rm -rf /var/opt/gitlab/postgresql/data.13
在执行:gitlab-ctl pg-upgrade -V 13
15.11.0>16.0.1
docker run -d --restart=always -p 9980:9980 -p 10022:22 --name gitlab_16_0 --env GITLAB_OMNIBUS_CONFIG="external_url 'http://IP:9980/'; gitlab_rails['lfs_enabled'] = true;" -v /home/gitlab/config:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:16.0.1-ce.0
大多数安装可以跳过16.0、16.1和16.2,因为升级路径上的第一个必需停止点是16.3。在所有情况下,您都应该查看这些中间版本的说明。一些 GitLab 安装必须停止在这些中间版本,这取决于所使用的特性和环境的大小: 16.0.8: 用户表中有大量记录的实例。有关更多信息,请参见长时间运行的用户类型数据更改。16.1.5: 使用 NPM 包注册表的实例。16.2.8: 具有大量管道变量(包括历史管道)的实例。如果您的实例受到影响,并且您跳过了这些停止: 升级可能需要几个小时才能完成。该实例生成500个错误,直到所有数据库更改完成,然后 Puma 和 Sidekiq 必须重新启动。对于 Linux 包安装,会出现超时,并且需要手动解决方案来完成迁移。GitLab 16.0引入了围绕对项目规模实施限制的变化。在自我管理的情况下,如果使用这些限制,达到限制的项目在推送到同一组中未受影响的 Git 存储库时会导致错误消息。这些错误通常指的是超过零字节的限制(限制为0 B)。推送成功了,但错误暗示了其他情况,并可能导致自动化问题。阅读本期更多内容。这个 bug 在 GitLab 16.5及更高版本中得到了修复。