gitlab-ci出现fatal: reference is not a tree问题排查记录
今天有同学跟我反馈说CI打包的时候出现代码checkout出错,我的第一反应是肯定是分支或tag被删除了。让他发来链接,关键错误信息如下:
... Checking out 51220f06 as feature/notice... fatal: reference is not a tree: 51220f06ae00ae5a7d9b0cfe4dc1af91f6c78234 ERROR: Job failed: command terminated with exit code 1
我们的CI是使用的gitlab-ci,这里的checkout代码也是gitlab-runner内置的checkout机制,应该是不会出错的。以前也见过类似的错误提示,都是在分支或tag被删除的情况下,重试job才会出现的。所以我去检查是否能搜到feature/notice分支,在分支列表一查,分支还在,这就奇怪了,点击job执行页面上的hash竟然都能点进去,如下图所示的地方:
此处的分支和commit hash都能正常跳转,所以分支是正常的。当时还纳闷,就去分支列表搜索了下这个分支的关键词,一搜就发现端倪了,竟然有同名的,仔细一看原来是有个tag名也叫feature/notice,在tag列表删除这个名为feature/notice的tag,重新retry job,一切正常了。
这里简单总结下,gitlab-ci出现fatal: reference is not a tree问题的原因可能有:
当前执行的分支或tag被删除
当前执行的分支和tag有同名的情况
这个似乎是gitlab的一个bug,允许分支和tag同名但是在这种场景下会有问题,实际上gitlab分支和tag同名也存在其他的问题的,大家有兴趣可以研究下。