• 欢迎光临~

一次 gitlab 升级的思考

开发技术 开发技术 2022-12-25 次浏览

1. 动机

一个版本的gitlab用着好好的,为什么会想着去升级呢?
在一个宁静的下午,我左手github,右手gitlab,代码借鉴得那叫一个得心应手,突然公司的gitlab访问非常的缓慢,并且有时候会502,打开日志发现remote_ip居然有别个城市的,当初老板为了gitlab能方便访问,就将gitlab放在了公网上,一直以来都相安无事,怎么今天突然就被攻击了???
难道是gitlab的漏洞被利用了,我也只能这么猜测。
菜狗一枚只能尝试升级一下,看下是否还会被攻击。

2. 升级

当前使用的版本是 13.10.5,最新版本是15.7.0,确实落后太多了,也该升升级了;
本来想着按照官网给的升级路径应该是一路畅通无阻的,毕竟当初也升级过一次;
13.8.8 -> 13.12.15 -> 14.0.12 -> 14.3.6 -> 14.9.5 -> 14.10.Z -> 15.0.Z -> 15.1.Z (for GitLab instances with multiple web nodes) -> 15.4.0 -> latest 15.Y.Z
没想到出现了几个小插曲。

2.1 插曲1 unicorn -> puma

升级到14.0.12 web server 直接启动失败,原来是官方已经弃用了unicorn作为web server,改用了 puma,官方链接说明,解决办法也很简单,将 gitlab.rb 文件中 unicorn 部分注释掉,启用 puma 就行,大概在700行左右的样子。

2.2 插曲2 legacy storage

还是在13升14的时候,报错 legacy storage,详细错误忘了截图,但是找到了一个官方的issue,大概就是有仓库用了legacy storage,需要先升级到 hash storage(由于当时最开始用gitlab的时候好像还是安装的11版本,所以有这个问题),解决办法也很简单,一行命令运行一下即可:gitlab-rake gitlab:storage:migrate_to_hashed,然后就可以在 Admin > Monitoring > Background Jobs 看到当前进度,完成之后就可以继续升级了。

还有一点值得注意的就是,在后面的升级过程中,也会出现一些 Background Jobs,最好等这些Jobs都完成之后,再升级下一个版本,如果没完成就升级了,可能会出现问题。

2.3 插曲3 db migration 出错

解决了前两个问题之后顺利升级到了14.0.12,正当我准备高歌猛进的时候,升级14.3.6又出现了新的问题,数据库迁移报错,且降级到14.0.12也报错,说实话当时心态真的有一点爆炸,最致命的是由于过于自信觉得升级应该没问题,所以在关键版本没备份儿,现在又不知道如何解决,要继续升级得从头再来,而且好像也有人遇到了这个问题,但是不知道如何解决,Upgrade from 14.0.12 to 14.3.6 ce fails。
没办法了,只能死马当活马医了,在gitlab的升级路径中看到一条从 14.0.12 > 14.1.8 的路径,试一下先升级14.1.8,再升级14.3.6,没想到瞎猫碰到死耗子,成功了,感谢佛主保佑。

接下来的升级过程就很顺利了,一直到15.4也没出什么问题,但是升级期间我还是谨慎了些许,到了关键版本都会备份一下,避免出现问题。

3. 升级之后的变化

升级之后除了UI变了一下,gitlab-runner升级之后,修改了之前 only change 的判断,目前对我来说好像并没有什么不一样,总之就是升级了,但好像没有完全升级。

4. 最后想说

这次升级其实还是很有必要的,虽然升级的一些功能,目前我还没有用到,但是我至少跟上了,现在没用到不代表明天也用不到,但是现在没升级明天铁定用不到;
假如这次没有升级,等下次gitlab已经到20版本的时候,我还能跟得动吗?

当年在.net core出来的时候,听到可以运行在Linux上,我当时非常兴奋,向老板推荐使用.net core开发新的项目,但是由于公司有现成的很成熟的框架(但是很老,aspx+ajaxpro不知有几人听说过),就被拒绝了,后来我离开了原公司,到了新的公司,如愿用上了.net core、Linux、Docker等,过了几年听说前公司转型用了Java,诚然当时老板的决定是没错的,有成熟的框架没必要花成本从头开始,但是假如我当初留在那家公司,那么几年后我还能否跟得上.net的脚步?

工作了几年之后常常听到一些讨论,到底是技术重要还是业务重要?
说业务重要的观点很明确:1. 目前写的东西就没技术含量,业务才是yyds;2. 技术永远是为业务服务的。
完全没毛病,且非常赞同,但我想说的是:当我们初出茅庐的时候,我们的目标难道是成为一个业务大佬?谁的目标不是架构师呢?虽然现在只是一个crud boy,虽然现在梦想也有所更改(目前只想跟上脚步,不要被无情的抛弃掉),但我还是希望5年10年20年后还能写得动代码,并且用的是当时的框架。

废话了一点点,希望大家想做技术的都不要被丢下,能跟着大部队一直走下去。

程序员灯塔
转载请注明原文链接:一次 gitlab 升级的思考
喜欢 (0)