好久没有发文章了,回首一看上一次发文已经是去年的事了,自从AI编程相对成熟之后,很多问题解决起来没以前那么复杂,资料也没以前那么难找了,但同时感觉虽然做出来的东西越来越好,但自身的技术水平却并没有得到更大的提升,有一种非常割裂的感觉。想来想去还是应该偶尔放下AI,回归传统,时代在不停进步,普通人想要跟上潮流,还需要不停的磨练自己。
这篇文章的起因是昨天,gitlab的流水线突然崩了,提交的构建请求全部无法找到gitlab-runner执行,内部日志提示错误:
bash
WARNING: Checking for jobs... failed runner=pbygdUTgC status=POST https://jihulab.com/api/v4/jobs/request: 401 Unauthorized
这个问题非常眼熟,之前似乎遇到过,于是我开始翻找以前的文章,发现没做记录,便从头开始排查,最后花了一下午的时间解决了这个问题,但是回过头来又感觉这一下午花得实在不值,还是记录下来以免后续遇到类似问题从头解决。
那么这个问题的解决方案其实很简单,原因是gitlab官方更新了gitlab版本,旧版本的gitlab-runner无法连接上新版本的平台,导致连接失败,所以只需要更新gitlab-runner版本就行了如果你是docker部署,参考该文档,如果你是手动部署,参考该文档。
如果你只是想解决问题,那么看到这就差不多够了,下面部分是该问题的详细排查步骤。
分界线
最早发现问题是在同事提交修改之后,发现修改内容并未更新到测试环境,第一反应便是流水线出问题了,检查当前项目的部署记录,发现果然都失败了,提示无法找到可用的gitlab-runner。再进入到gitlab的CI/CD设置项,进入到runner状态页,runner的状态都提示离线。
进入到服务器检查runner状态,查看runner日志,发现runner报错
bash
WARNING: Checking for jobs... failed runner=pbygdUTgC status=POST https://jihulab.com/api/v4/jobs/request: 401 Unauthorized
第一反应是token过期了,毕竟流水线的token是存在时效的,且按照常理来说,token失效是会提示401的,于是便向着token失效方向排查。在经历了创建token、删除历史runner(删除前记得备份)、修改url http/https调用方式、访问gitlab时忽略证书、清除gitlab-runner缓存等操作后,我发现都失败,而且在新创建的过程中,如果token失效,会直接提示401 Unauthorized,也就是说如果当前runner能够创建成功,至少说明当前的token是有效的,但是在创建成功后,gitlab-runner的管理页面显示当前runner是离线状态,且服务器日志提示401 Unauthorized,说明问题可能不是出在token上,可能是平台出现问题了,于是当即联系上gitlab对应的客服人员,得知是升级带来的问题。

已知问题原因,那解决起来就方便了,去官方文档查询对应的升级方案就完事了。
但其实还有后续。
由于国内服务器连接的是局域网,直接使用二进制脚本安装的方式下载速度极为缓慢,需要本地使用科技从亚马逊库中把对应的deb包下载下来后使用dpkg安装,至于如何确定自己当前的服务器版本,可以使用lsb_release -a
命令查看当前linux发行版的完整版本信息,并使用uname -a
查看当前服务器的内核详细信息,下载完成后按照官方文档提供的安装命令安装后就完事了。
那么这是手动安装时所需的操作,如果是docker安装需要进行哪些步骤。
如果你也是悲伤的局域网用户,会发现国内很多镜像源使用的最新包都是3年前的版本
运行后查看gitlab-runner版本号提示是14版本

虽然这个版本莫名的居然可以用,但以防万一后续哪天突然出问题了又得重新搞一遍,还是把问题完整解决了再说。
登录docker hub可以发现,当前gitlab-runner的latest版本应该是22天前发布

那么问题就很明显出现在镜像源上,再次在本机使用科技pull该镜像,使用save命令打包成tar文件
bash
docker save -o gitlab-runner.tar gitlab/gitlab-runner:latest
把打出来的tar包(如果你像我一样没有把包的地址使用绝对路径拼出来,但又没有合适的搜索工具找到这个包的时候,不妨去 C:\User\用户名
文件夹里找一找)放到服务器上,再使用load命令解压当前文件
css
docker load -i gitlab-runner.tar
那么就得到最新18版本的runner了

经过这一番折腾后,流水线终于恢复了,然后我在今天在写文章的时候注意到gitlab流水线页面的右下角增加了一小块提示:

不知道是我找他们之前加上的还是之后加上的,按照他们当时的秒回状态来说,估计是不少客户遇到了这个问题吧(笑)。