You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 11:43:26