GitLab CI/CD报Missing Delta Base Exception问题求助
排查GitLab CI/CD流水线中JGit缺失delta base的问题
环境信息
GitLab 12.8.5 GitLab Shell 11.0.0 GitLab Workhorse v8.21.0 GitLab API v4 GitLab Pages 1.16.0 Ruby 2.6.5p114 Rails 6.0.2 PostgreSQL 10.12
运行在Ubuntu系统上的AWS Runner 15.8.1
错误现象
流水线执行时持续失败,错误日志如下:
:prepare (Thread[Daemon worker,5,main]) completed. Took 0.565 secs. FAILURE: Build failed with an exception. * What went wrong: Execution failed for task ':prepare'. > org.eclipse.jgit.api.errors.TransportException: **Missing delta base 4cc4be5f642dacedaf5b7bd6e840856355e703a4** * Try: Run with --debug option to get more log output. Run with --scan to get full insights.
回滚代码变更后问题仍存在,且缺失的delta base哈希值固定为4cc4be5f642dacedaf5b7bd6e840856355e703a4。before_script和after_script中的ls命令可正常返回文件列表,文件大小与本地一致。
已尝试的无效方案
- 将Gradle版本升级至6.8和6.9
- 通过GUI清理Runner缓存
- 重启AWS实例上的Runner服务
- 创建新分支并触发构建
- 修改流水线配置以匹配其他成功构建的服务
- 更新所有依赖至最新版本
- 更换其他Runner
流水线失败阶段配置
.publish: &publish before_script: - mkdir -p /root/.gradle - export GRADLE_USER_HOME="/root/.gradle" - ls -la stage: publish script: - ./gradlew clean - ./gradlew build --debug --info --stacktrace -Prelease.useLastTag=true after_script: - ls - ls build/libs artifacts: *jars
排查思路与解决方案
1. 检查Git仓库服务器端完整性
该错误核心是Git对象缺失,需在GitLab服务器的仓库目录操作:
- 进入仓库路径(通常为
/var/opt/gitlab/git-data/repositories/<group>/<project>.git) - 执行
git fsck --full检查仓库对象完整性,确认4cc4be5f642dacedaf5b7bd6e840856355e703a4是否存在缺失 - 若缺失,从本地完整仓库推送该对象:
# 本地仓库执行 git push git@git.company.com:project-group/project.git 4cc4be5f642dacedaf5b7bd6e840856355e703a4:refs/heads/temp-branch git push git@git.company.com:project-group/project.git :refs/heads/temp-branch
2. 强制Runner执行完整仓库克隆
增量克隆可能导致历史对象缺失,修改流水线配置:
before_script: - mkdir -p /root/.gradle - export GRADLE_USER_HOME="/root/.gradle" - git fetch --unshallow || true # 浅克隆转为完整克隆 - git reset --hard origin/$CI_COMMIT_BRANCH # 重置本地仓库到远程分支状态 - ls -la
或在Runner配置中设置GIT_DEPTH: 0禁用浅克隆。
3. 排查Gradle插件的Git操作逻辑
错误出现在:prepare任务,大概率是Gradle插件(如release插件)依赖缺失的Git对象:
- 临时移除
-Prelease.useLastTag=true参数,验证是否为该插件导致的问题 - 查看
:prepare任务的具体实现,确认其Git操作逻辑 - 回退或更换release插件版本,避免依赖异常历史对象
4. 修复GitLab服务器端仓库
在GitLab服务器仓库目录执行:
git repack -a -d -f
重新生成仓库的pack文件,修复可能损坏的对象存储。
5. 清理GitLab服务器缓存
登录GitLab服务器执行:
gitlab-rake cache:clear gitlab-ctl restart
清理服务器端缓存并重启服务。
内容的提问来源于stack exchange,提问作者jmedrano
相关产品推荐
相关产品推荐

