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

GitLab CI shell执行器runner克隆Git仓库失败Docker执行器正常该如何排查

Shell执行器Git克隆鉴权失败排查方案

Shell与Docker执行器的Git克隆行为核心差异

  • 环境纯净度差异:Docker执行器每次任务启动全新的干净容器,无任何预设Git配置、环境变量;Shell执行器复用宿主机gitlab-runner用户的运行环境,会加载系统级/etc/gitconfig、用户级~/.gitconfig配置,以及全局环境变量,预设配置会覆盖Runner自动注入的CI令牌规则。
  • 工作目录生命周期差异:Docker执行器的工作目录为容器内临时目录,任务结束后随容器销毁无残留;Shell执行器的工作目录/home/gitlab-runner/builds/为持久化存储,之前任务残留的.git/config配置、缓存凭证会对后续任务产生影响。
  • Git版本差异:Docker镜像内的Git版本由镜像决定,Shell执行器使用宿主机系统安装的Git版本,版本差异可能导致令牌解析、凭证处理逻辑不同。

排查方向

  1. 检查Git全局配置冲突
    切换到gitlab-runner用户执行命令查看所有Git配置及来源:
    sudo su - gitlab-runner
    git config --list --show-origin
    
    重点排查是否存在credential.helper配置(会缓存旧凭证覆盖Runner注入的CI令牌)、url.*.insteadOf规则(会自动替换CI生成的带令牌仓库地址),如有相关配置直接删除即可。
  2. 清理残留工作目录
    持久化工作目录下残留的Git配置会导致鉴权冲突,直接清空所有历史构建目录测试:
    sudo rm -rf /home/gitlab-runner/builds/*
    
  3. 手动验证克隆能力
    切换到gitlab-runner用户,使用有效令牌手动执行克隆命令,排查是否为环境本身问题:
    git clone http://gitlab-ci-token:<可用的CI令牌/私人令牌>@gitlab-server/dev/repo.git
    
    如手动克隆仍失败,进一步排查:
    • 执行env | grep -i proxy检查是否存在全局代理配置,导致请求被转发到错误地址
    • 检查/etc/hosts中gitlab-server的解析是否和GitLab服务端真实IP一致
  4. 升级Git版本
    Ubuntu 18.04默认自带的Git 2.17版本存在已知的凭证处理兼容性问题,低于GitLab 13.10要求的最低Git版本,可通过官方PPA升级:
    sudo add-apt-repository ppa:git-core/ppa
    sudo apt update && sudo apt install -y git
    

需查看的日志文件

  • GitLab Runner运行日志:路径为/var/log/gitlab-runner/gitlab-runner.log,可在config.toml中添加log_level = "debug"后重启Runner服务,获取克隆阶段的详细入参日志。
  • GitLab服务端Nginx访问日志:路径为/var/log/gitlab/nginx/gitlab_access.log,可查看Shell Runner的克隆请求是否到达服务端、返回401状态码的具体请求特征。

内容的提问来源于stack exchange,提问作者KvR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:27:02