前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hello new GitLab! 私有化GitLab平滑升级指南!版本换衣不忧愁

Hello new GitLab! 私有化GitLab平滑升级指南!版本换衣不忧愁

原创
作者头像
Mintimate
发布2023-10-09 00:50:15
1.9K0
发布2023-10-09 00:50:15
举报
文章被收录于专栏:Mintimate's BlogMintimate's Blog
头图不可以少呀
头图不可以少呀

博客:https://www.mintimate.cn Mintimate’s Blog,只为与你分享

GitLab

在之前的部分中,我们已经讨论了如何安装GitLab并部署GitLab Runner。现在,让我们继续向下,了解如何进行GitLab的升级。

如果你还不知道如何部署GitLab,那么可以准备一台腾讯云轻量应用服务器,最好是8G内存的版本,并查看这篇教程进行配置:

升级GitLab是非常重要的,因为每个版本都会带来新的功能和修复现有的问题。但是,具体如何升级呢?如何平滑升级呢?总不能把大楼拖倒,重新搭建一遍,再把仓库内容重新放上去吧?

为什么要升级?

为什么要升级GitLab呢? 旧版本又不是不能用?

为什么要升级呢?
为什么要升级呢?

如果你网上冲浪🏄‍♂️一下,总结一下,有这些原因:

  • 安全漏洞和数据泄露: 旧版本的GitLab可能存在已知的安全漏洞
  • 功能限制和缺失: 新版本的GitLab通常会引入新功能和增强功能;
  • 缺少错误修复和性能改进: GitLab的升级通常包含对已知错误的修复和对性能的改进;
  • 兼容性问题: 随着时间的推移,操作系统、数据库和其他依赖库可能会更新和升级;
  • 缺乏社区支持和文档更新: GitLab的社区不断发展和演变,提新的文档不适用于旧版本。

这里我举两个例子。

安全漏洞

首先,不是说开源软件就一定不安全。正是因为开源、社区软件开源,所以在存在安全漏洞的时候;会有安全机构或者组织、个人进行披露,并给出修复的方法。如果本来就是闭源的软件,不是没有安全漏洞,只是没有披露。

我平时也有做一些网络安全,经常也会看到各个系统和开源软件的漏洞披露;前段时间也有看到GitLab的代码执行漏洞(CVE-2023-2478)

漏洞描述
漏洞描述

受影响的版本范围是:

  • 15.4 <= GitLab CE/EE < 15.9.7
  • 15.10 <= GitLab CE/EE < 15.10.6
  • 15.11 <= GitLab CE/EE < 15.11.2
原来如此
原来如此

可以看到,目前最新的版本16系列就是没影响的。所以,对于大多数用户,这个漏洞给出的修复,也是推荐升级GitLab版本。

新功能迭代

新的功能,也是在不断的版本更新中出来的。比如:最开始的GitLab是不支持Pipeline的,需要使用jenkins来完成CI/CD的操作。

GitLab VS Jenkins
GitLab VS Jenkins

当然,现在的GitLab还是无法取代Jenkins的…… 只是某些情况下,可以使用GitLab替代Jenkins的部分功能。

再比如,GitLab 12.0(2019年5月):

  • 引入了GitLab的代码审查分析功能,用于自动化静态代码分析和检查。
  • 添加了GitLab的容器扫描功能,用于检测和修复容器镜像中的安全漏洞。

GitLab 16:

  • 使用Puma代替unicorn
  • ……

不过,新的功能你是否“感冒”,就看取舍了。

升级的危险⚠️

升级的危险有什么呢?最主要的就是: 仓库安全!

还有一些危险需要注意:

  • 版本升级导致的依赖包更新: 如GitLab的15升级为GitLab16,依赖部分使用puma替代unicorn,原有的unicorn弃用;
  • 部分GitLab的版本需要特定版本的OpenSSH,请注意OpenSSH升级后,是否会影响系统的OpenSSH依赖。

建议大家在升级GitLab前,先大上一个快照,比如腾讯云轻量应用服务器的快照功能:

轻量应用服务器的快照功能
轻量应用服务器的快照功能

如何升级

好啦,现在正式开始我们的教程。考虑到GitLab的安装方法比较多,我们这里以Docker版本为主,在粗略介绍一下直装版本和K8S版本如何操作。

操作参考:

Docker版本

原则上,Docker版本的升级是最简单的了。基本上,就和我们平时升级Docker镜像是一样的步骤。

在小版本上进行升级,通常情况下没什么问题;但是如果是跨越版本的升级,一定要记得备份GitLab的配置文件。也就是config文件夹下的gitlab.rb。如果需要完整地备份或者是进行数据的迁移:

代码语言:shell
复制
# 完整备份
sudo docker exec gitlab  gitlab-backup create

之后,会自动进行备份:

自动备份
自动备份

备份好后,在Docker映射的文件夹内存在:

备份文件
备份文件

还原的话,需要在gitlab.rb内,定义gitlab_rails['backup_path']指向还原目录,并运行:

代码语言:shell
复制
sudo docker exec gitlab  gitlab-backup restore BACKUP=1696414953_2023_10_04_16.4.1-ee

全量备份主要用于大版本升级和数据迁移。小的版本升级,或者已经备份完成后,可以接下来的操作。

OK
OK

升级的步骤非常简单,假设你之前安装GitLab的方法是这样的:

代码语言:shell
复制
# GitLab的拉取命令
sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 8443:443 --publish 8880:80 --publish 8822:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ee

那么我们更新方法:

代码语言:shell
复制
# 停止GitLab的版本
sudo docker stop gitlab
# 删除旧的GitLab镜像
sudo docker rm gitlab
# 重新拉取最新版本的GitLab镜像
sudo docker pull gitlab/gitlab-ee:latest
拉取最新版本GitLab
拉取最新版本GitLab

最后,重新启动GitLab:

重新启动GitLab
重新启动GitLab

当然,如果你是跨版本的话,建议在重新启动GitLab前,把config内的文件进行备份,并删除gitlab.rb文件,在重新启动GitLab后,对比新旧文件的不同之处进行修改。

直装版本

直装版本其实也非常简单,需要注意,直装版本,是直接使用软件包管理器进行GitLab的包管理,更新的话,依赖环境也会进行更新。

具体可以参考:

在更新之前,建议使用命令进行备份数据:

代码语言:shell
复制
# 安装依赖
sudo apt install rsync
# 使用CLI进行备份
sudo gitlab-backup create

还原的话,需要在gitlab.rb内,定义gitlab_rails['backup_path']指向还原目录,并运行:

代码语言:shell
复制
# 去除标识的备份文件是什么呢?1696414953_2023_10_04_16.4.1-ee_gitlab_backup.tar => 1696414953_2023_10_04_16.4.1
sudo gitlab-backup restore BACKUP=『去除后缀标识的备份文件』

说实话,个人建议安装GitLab还是用K8S版本或者Docker比较好。

升级Runner

GitLab进行了升级,那么Runner肯定也要。GitLab的Runner升级就简单太多了。

通常情况下,Runner的更新,配置文件并没有改变(最起码进几个大版本是这样的)。

所以,你只需要停止镜像、删除镜像和重新拉取部署即可:

代码语言:shell
复制
# 停止GitLab Runner的镜像
sudo docker stop gitlab-runner
# 删除旧的GitLab Runner镜像
sudo docker rm gitlab-runner
# 重新拉取最新版本的GitLab Runner镜像
sudo docker pull gitlab/gitlab-runner:latest
docker run -d --name gitlab-runner --restart always \
  -v /dockerData/gitlab-runner:/etc/gitlab-runner \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gitlab/gitlab-runner:latest

到此,就升级安装完成了。

嘿嘿,如果升级完不能用~ 那就重新配置一下吧~~~ 我是认为Runner没有备份的必要(●'◡'●)ノ♥

END

通过本文的讲解,我们了解了GitLab升级的重要性,包含获取新功能、安全修复、兼容性提升等方面的考量。另外,文章中也详细介绍了不同部署方式的GitLab如何进行平滑升级,其中Docker版本的升级最为简单方便。

如果在操作中遇到任何问题,也欢迎在评论区进行讨论。

问号?
问号?

下次讲什么内容好呢?好像有什么坑没填来着的?(;′⌒`)

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GitLab
  • 为什么要升级?
    • 安全漏洞
      • 新功能迭代
      • 升级的危险⚠️
      • 如何升级
        • Docker版本
          • 直装版本
          • 升级Runner
          • END
          相关产品与服务
          容器镜像服务
          容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档