升级gitlab版本
概述
背景
Docker 搭建的 GitLab 11.10.4 版本较旧,拟升级至虚拟机部署的 16.0.1 版本,并安装适配的 GitLab Runner 实现 CI,代码合并需流水线通过。
升级目标
-
降低用户影响:升级过程中需将对现有用户的影响降至最低,确保升级耗时尽可能短。
升级结束后,用户仅需进行极简操作,即可无缝切换至新环境下的 16.0.1 版本。 -
保障数据完整性:需将现有版本中的全部数据(涵盖用户信息、组织架构、项目文件及提交记录等)完整无损地迁移至新环境的 16.0.1 版本中。
升级前置条件
环境清单规划
服务器IP地址 | 用途描述 | 部署方式 | GitLab版本 | 参考链接 |
---|---|---|---|---|
192.168.80.125 | base虚拟机 | 不涉及 | 不涉及 | 不涉及 |
192.168.80.130 | 用于造数,模拟原始环境 | Docker容器化部署 | 11.10.4(较旧) | Docker搭建GitLab 11.10.4 |
192.168.80.131 | 虚拟机直接部署16.0.1版本 | 虚拟机部署 | 16.0.1(较新) | 虚拟机安装GitLab 16.0.1 |
192.168.80.132 | 本地yum源,手工升级至16.0.1版本 | 虚拟机部署 | 11.10.8 → 16.0.1(升级) | 暂无 |
192.168.80.133 | 脚本化执行 | 虚拟机部署 | 11.10.8(可能后续脚本升级) | 暂无 |
gitlab升级路径规划
升级路径
-
跨度版本:11.10.4(不含)至16.0.1(含)共发布428个版本
-
升级策略:通过官方定义的17个「升级站点」实现跨越式升级
-
路径依据:参考官方升级路径工具生成升级路径查询
序号 目标版本 关键升级节点 1 11.10.8 11.10.4 → 11.10.8 2 11.11.8 11.10.8 → 11.11.8 3 12.0.12 11.11.8 → 12.0.12 4 12.1.17 12.0.12 → 12.1.17 5 12.10.14 12.1.17 → 12.10.14 6 13.0.14 12.10.14 → 13.0.14 7 13.1.11 13.0.14 → 13.1.11 8 13.8.8 13.1.11 → 13.8.8 9 13.12.15 13.8.8 → 13.12.15 10 14.0.12 13.12.15 → 14.0.12 11 14.3.6 14.0.12 → 14.3.6 12 14.9.5 14.3.6 → 14.9.5 13 14.10.5 14.9.5 → 14.10.5 14 15.0.5 14.10.5 → 15.0.5 15 15.4.6 15.0.5 → 15.4.6 16 15.11.13 15.4.6 → 15.11.13 17 16.0.1(最终版本) 15.11.13 → 16.0.1
安装包准备
安装yum-utils
yum install -y yum-utils
下载rpm包
此次升级涉及的rpm包为:
mkdir -p gitlab_rpm
cd gitlab_rpm
yumdownloader gitlab-ce-11.10.8-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-12.0.12-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-12.1.17-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-12.10.14-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-13.0.14-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-13.1.11-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-13.8.8-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-13.12.15-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-14.0.12-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-14.3.6-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-14.9.5-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-14.10.5-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-15.0.5-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-15.4.6-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-15.11.13-ce.0.el7.x86_64.rpm
yumdownloader gitlab-ce-16.0.1-ce.0.el7.x86_64.rpm
为节省时间,可先下载好rpm包,配置好本地yum源后,再进行升级。
yum源配置
在升级操作期间,根据统计数据,整个过程需下载总计约 14GB 的数据。为避免因升级过程中网络波动导致下载失败,建议提前完成 YUM 源的配置。
需特别强调:必须通过配置 YUM 源进行升级,不可使用 rpm -ivh
方式直接安装升级。
原因在于,yum install
命令会先卸载相关软件包的老版本,再安装新版本,确保升级过程的完整性和依赖关系处理;而 rpm -ivh
仅执行安装操作,无法处理依赖关系或卸载旧版本,可能导致系统异常。
具体配置yum源参考文章:离线环境必备-本地YUM源搭建全流程指南
升级实操
由于旧数据是dokcer容器部署,需要先备份导出数据,在11.10.4虚拟机版本导入,再逐步升级到16.0.1版本。
11.10.4的docker版本备份
- 进入容器内部
docker exec -it gitlab bash
- 备份数据
gitlab-rake gitlab:backup:create
- 执行说明:
- 该命令会生成包含数据库、附件和配置的完整备份包
- 备份文件默认存储路径:/var/opt/gitlab/backups/
- 文件命名规则:<时间戳>_<GitLab版本>_gitlab_backup.tar
- 建议定期执行备份并验证文件完整性
- 注意事项:
- 确保备份目录有足够存储空间
- 生产环境建议配置自动化备份策略
- 备份前建议暂停非关键业务操作
- 请注意生成的文件的所属用户和权限(git:git),后续传到新环境也需要这个用户和权限,否则会有Unpacking backup ... tar: xxxx.tar: Cannot open: Permission denied
11.10.4的虚拟机gitlab安装
gitlab各个版本的安装思路类似,具体可以参考张师傅安装16.0.1版本的步骤。
虚拟机安装GitLab 16.0.1
yum install -y gitlab-ce-11.10.4-ce.0.el7.x86_64.rpm
- 执行说明:
- 若需升级到其他版本,请替换相应rpm文件名
- 建议在维护窗口内进行操作以减少对用户的影响
- 注意事项:
- 确保服务器网络通畅以便顺利完成下载和安装过程
- 在升级前务必备份重要数据以防万一
11.10.4的虚拟机gitlab恢复
gitlab-rake gitlab:backup:restore BACKUP=1744622154_2025_04_14_11.10.4
- 执行说明:
- 需要将备份文件上传到/var/opt/gitlab/backups/目录下,并确保文件权限为git:git
- 需替换BACKUP参数为实际备份文件名(<时间戳>_<GitLab版本>,注意不带_gitlab_backup.tar)
- 建议在测试环境验证恢复流程后再执行生产环境操作
- 验证步骤:
- 确认恢复后服务状态:sudo gitlab-ctl status
- 验证关键数据(用户、项目、仓库等)完整性
升级到11.10.8版本及后续版本
依次升级到11.10.8版本及后续版本,直至达到目标版本。
yum install -y gitlab-ce-11.10.8-ce.0.el7.x86_64.rpm
...
yum install -y gitlab-ce-16.0.1-ce.0.el7.x86_64.rpm
- 执行说明:
- 使用yum命令逐个版本升级,会自动卸载掉老版本,并安装新版本
- 每次升级前,请确保已备份重要数据
- 建议重启验证是否升级成功:sudo gitlab-ctl restart
- 验证版本1:sudo cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
- 验证版本2:浏览器登陆,查看右上角-->问号-->Help
- 升级后,请务必验证所有功能是否正常工作
在升级过程中遇到的常见问题
下一篇文章会详细介绍在升级过程中遇到的常见问题及解决方案。
归档仓库
新系统投产前数日,应暂停旧环境 GitLab 新增用户操作,待系统迁移升级至新环境后统一创建。迁移完成后,需对原仓库归档并设置防误操作机制,确保归档后只读不写。
后续将用 Python 脚本实现仓库归档,确保归档后拒绝代码提交。
参考检查项
序号 | 检查类别-具体项 | 检查项详细说明 | 检查人员 | 检查结论 |
---|---|---|---|---|
1 | 用户信息-用户列表 | 检查用户列表是否完整、准确,无遗漏或错误。 | 张三 | 通过 |
2 | 用户信息-电子邮件地址 | 验证用户电子邮件地址格式是否正确(如包含@符号、域名有效等),并确认其有效性(如发送测试邮件验证)。 | 李四 | 通过 |
3 | 用户信息-用户头像 | 检查用户头像是否显示正常,无损坏或失真,且符合公司或平台的头像规范(如尺寸、格式等)。 | 王五 | 通过 |
4 | 用户信息-用户公钥 | 确认用户公钥是否已正确配置在系统中,且可用于加密通信或身份验证。 | 赵六 | 通过 |
5 | 用户信息-访问令牌(token) | 检查访问令牌是否已正确生成,且具有相应的权限,可用于访问受保护的资源。 | 孙七 | 通过 |
6 | 组信息-基本概况 | 检查组的基本信息(如名称、描述、创建时间等)是否完整、准确,无错误或遗漏。 | 周八 | 通过 |
7 | 组信息-关联项目信息 | 验证组所关联的项目信息(如项目名称、ID、状态等)是否正确、完整,且与实际情况相符。 | 吴九 | 通过 |
8 | 组信息-成员构成信息 | 检查组的成员信息(如成员姓名、角色、权限等)是否准确,且包含所有必要成员,无遗漏或错误。 | 郑十 | 通过 |
9 | 组信息-组头像 | 确认组头像是否显示正常,无损坏或失真,且符合公司或平台的头像规范。 | 陈一 | 通过 |
10 | 合并请求(合并申请) | 检查合并请求的状态(如待审核、已批准、已拒绝等),合并内容是否正确,且与预期一致。 | 刘二 | 通过 |
11 | 项目信息 | 验证项目的基本信息(如名称、描述、负责人等)、配置(如权限设置、版本控制等)是否正确,且符合项目需求。 | 朱三 | 通过 |
12 | 分支信息 | 检查分支的创建、删除、合并等操作是否正确,且分支状态(如活跃、已合并等)与实际情况相符。 | 钱四 | 通过 |
13 | 标签(TAG) | 验证标签的创建、使用是否正确,标签名称是否规范,且与代码版本或功能模块相关联。 | 孙五 | 通过 |
14 | 提交历史记录 | 检查提交历史是否完整,包含所有必要的提交信息(如提交者、时间、注释等),且提交记录无错误或遗漏。 | 李六 | 通过 |
15 | 问题(ISSUE) | 验证问题的创建、分配、解决等状态是否正确,问题描述是否清晰,且与实际情况相符。 | 周七 | 通过 |
16 | 里程碑 | 检查里程碑的设定(如名称、目标、截止日期等)、完成情况是否正确,且里程碑状态(如已完成、进行中等)与实际情况相符。 | 吴八 | 通过 |
评论区