概述

最近公司有台部署于2021年gitlab(gitlab-ee-13.11.7)经常被恶意攻击,结合CVE等信息,除了升级防护以外,对gitlab服务本身也需要升级一下,降低重大漏洞对数据安全的影响,体验和使用新功能。本文对gitlab升级过程进行记录。同时,希望对有gitlab升级需求的小伙伴们有所帮助。

环境说明

环境名称版本备注
操作系统CentOS 8.5已经停止支持,仓库源多数不能适用
gitlab版本gitlab-ee 13.11.7于2021年当时最新版

注意受不同版本影响,部分依赖包版本需要针对性升级,另外可能需要补充相关依赖。

升级说明

资料参考官方资料https://docs.gitlab.com/update/

Gitlab版本号采用x.y.z格式命名。其中x表示主版本数字,代表年编码(17代表2025、18代表2026以依次类推);y表示次版本号,代表月份编码,用数字1-12表示;z表示补丁号,用数字1,2,3等表示。

版本升级说明

  • Gitlab升级必须安装官方指定的版本依次升级,即官网描述的升级路径,可以通过升级路径工具查询必须要升级站(版本),在升级步骤会进行详细说明。
  • 有数据的升级,每站升级前需确保功能正常并进行完整备份,利用备份和对应的版本安装程序能够在很快完整数据恢复。
  • 站(版本),通常需要进行数据的schema升级、版本升级、依赖升级,所以不能跳过。

1、查询升级路径

安装Gitlab官方文档,Gitlab升级需要遵循升级路径(即特定版本)依次升级。在官网目前仅提供Gitlab 16、Gitlab 17、Gitlab 18版本的升级路径。对于更早版本,我们可以通过https://gitlab-com.gitlab.io/support/toolbox/upgrade-path来查询从当前版本升级至目标版本的路径。
官方updated Path Tool
操作步骤:

  • 选择当前版本号(如果列表中无当前版本,需要向下选择小的版本号)
  • 选择目标版本
  • 选择版本/Edition 本例适用Enterprise版本,二者处适用包不一样,其他无明显区别。
  • 选择OS类型
  • 其他选项,仅供参考
  • 选择Go!
    系统将展示需要经过的站(关键版本)

在这里插入图片描述在结果页中可以看到必须的版本站(stop)以及对依赖、操作系统、数据库系统的的要求,处升级操作系统以外,其他依赖升级和数据升级均相对安全,可以放心升级。

2、获取安装包

安装升级包全部在Gitlab官网获取,站点地址https://packages.gitlab.com/gitlab/gitlab-ee

由于某些原因,目前所有yum/dnf源不能完全提供完整的升级路径站所需的全部版本,需要按照以下方式手动获取。

13.12.15版本站(stop)为例说明获取安装包。

2.1 安装包选择

安装包获取1
版本检索说明

  • 在1处搜索去输入版本号,本例13.11.15,回车后出现Package Type选择框。
  • 在2处选择安装安装包类型
  • 在3处输入linux约定的发行版本表示,本说明centos8.5,输入el/8,其他发行版本依次类推。
  • 在3处回车,根据架构在4处点击包名称。

2.2 版本下载

通过点击上述的包名称,进入包详情页。
安装包获取2
在次详情页中,翻找wget区域,点击即完成wget下载的复制。

# 以13.12.15示例
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-13.12.15-ee.0.el8.x86_64.rpm/download.rpm

需要按照升级路径中所有版本全部下载备用,不可缺少,否则升级将无法完成。

3、升级执行

3.1 Gitlab备份

建议
备份过程可以通过防火墙或者其他策略禁止其他用户访问,以保证所有Gitlab所有组件不停止服务,能够保证备份的完整。在操作过程中发现所谓非必须服务依然可能备份不完整。

Gitlab备份命令

gitlab-rake gitlab:backup:create

主要控制台的提示信息,Gitlab的管理程序/脚本具备良好的信息提示支持,不要漏过关键信息。

通常,备份结果放置在目录

/var/opt/gitlab/backups

备份完成后需要将备份和/etc/gitlab中的所有文件一起备份其他存储设备。在实际操作中,笔者每次将上述数据文件备份至nas中。

3.2 升级执行

基于centos,通过RPM命令进行安装。
安装命令

rpm -Uvh filename.rpm

安装说明

  • 执行过程中,建议不要长时间离开,注意控制台提示信息。Gitlab提供了良好的信息提示,例如升级失败的原因和补救措施。建议,有异常情况将错误信息复制、保存到文档中备用。
  • 由于版本升级,依赖包、数据库、操作系统(通常不需要)需要安装或者升级,根据提示进行操作即可。
  • 部分版本需要修改配置,根据实际情况检索解决方案,通常比较简单处理和Gitlab会提供修复脚本,注意控制台提示信息。

3.3 升级完成

升级完成后,部分版本需要手动重启Gitlab服务,为了避免以外,建议安装完成后全部重新Gitlab服务。

gitlab-ctl restart

4、升级实操

本文仅记录了13.11.7升级至16.11.10部分,后续版本升级过程已经同事执行。如果需要补充或者值得借鉴的内容再补充。

文本记录了笔者在升级过程中遇到的问题。

下载安装包

13.11.716.11.10部分

# 13
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-13.12.15-ee.0.el8.x86_64.rpm/download.rpm

# 14
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-14.0.12-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-14.3.6-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-14.9.5-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-14.10.5-ee.0.el8.x86_64.rpm/download.rpm


# 15
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-15.0.5-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-15.1.6-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-15.4.6-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-15.11.13-ee.0.el8.x86_64.rpm/download.rpm

# 16
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-16.3.9-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-16.7.10-ee.0.el8.x86_64.rpm/download.rpm
wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ee/packages/el/8/gitlab-ee-16.11.10-ee.0.el8.x86_64.rpm/download.rpm

13.y.z升级

无特殊说明,不重复。

备份!

升级

rpm -Uvh gitlab-ee-13.12.15-ee.0.el8.x86_64.rpm

13.y.z升级过程无特殊情况,确认数据完整性和功能可用性。

14.y.z升级

无特殊说明,不重复。

备份!

升级

按照路径依次执行。

rpm -Uvh filename.rpm

14.y.z升级过程存在数据库schema的较大升级,升级过程较慢,且可能存在升级失败,但是提示信息很好升级。
确认数据完整性和功能可用性。

15.y.z升级

如果配置了邮件服务,升级15.11.13更新前需要按照要求调整配置或者临时关闭邮件功能,待升级完整后按照最新版本邮件配置重新配置。

修改/etc/gitlab/gitlab.rb后,记得重新配置

gitlab-ctl reconfigure

备份!

升级

按照路径依次执行。

rpm -Uvh filename.rpm

15.y.z无特殊情况,确认数据完整性和功能可用性。

16.y.z升级

备份!

升级

升级16.3.9版本需要升级PostgreSQL13
升级命令

sudo gitlab-ctl pg-upgrade -V 13

升级成功后,注意保存控制台提示。即,恢复数据库服务或者功能正常后清理脚本。

==== Upgrade has completed ====
Please verify everything is working and run the following if so
sudo rm -rf /var/opt/gitlab/postgresql/data.12
sudo rm -f /var/opt/gitlab/postgresql-version.old

事实上,在16.7.1016.11.10安装升级中,需要再次升级PostgreSQL,但幸运地是不需要我们手动处理了,以下为控制台数据库升级的处理脚本。

==== Upgrade has completed ====
Please verify everything is working and run the following if so
sudo rm -rf /var/opt/gitlab/postgresql/data.13
sudo rm -f /var/opt/gitlab/postgresql-version.old

5、小结

至此,已经完成了13.11.716.11.10部分升级,经过确认功能一切正常。后续,有其他同事完成后续升级,有时间、有必要继续补充。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐