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

已安装Git的Docker容器执行脚本时提示git: command not found

问题根因

核心错误是覆盖了系统内置的PATH环境变量。
PATH是Linux系统中用于定义可执行命令搜索路径的核心环境变量,系统执行git这类非内置命令时,会依次遍历PATH中配置的所有目录,查找对应名称的可执行文件。python:3镜像中git默认安装在/usr/bin/git路径下,该路径默认包含在系统初始PATH配置中,因此前期执行git --version、git config命令时可以正常找到git程序。
从执行日志的时序可以明确看到问题触发点:在完成正则匹配分支名后,执行了PATH="${BASH_REMATCH[2]}"赋值操作,这行代码直接将PATH变量的原有值(包含/usr/bin、/bin等系统命令目录的路径列表)完全替换为正则捕获到的分支路径片段,导致后续执行命令时,系统无法在被篡改的PATH列表中找到git可执行文件,最终抛出"git: command not found"错误。

修复方案
  • 更换自定义变量名,不要占用系统内置的PATH变量名,这是最稳妥无副作用的方案:
# 将原有的PATH变量重命名为无冲突的自定义名称,例如SUBMODULE_PATH
regex="^report\/[^\/]*\/([^\/]*)\/(.*)"
[[ $CI_COMMIT_BRANCH =~ $regex ]]
CUSTOMER="${BASH_REMATCH[1]}"
SUBMODULE_PATH="${BASH_REMATCH[2]}"
RELPATH=$(.ci/scripts/find_relative.py "${CI_PROJECT_PATH}" "${SUBMODULE_PATH}")
git submodule add ${RELPATH} ${CUSTOMER}
  • 移除冗余的git安装步骤:日志已经明确显示python:3镜像预装了最新适配版本的git,提前执行apt-get update && apt-get install -y git只会增加流水线执行耗时,没有实际作用,可以直接删除。
  • (不推荐)如果一定要使用PATH作为自定义变量名,赋值时需要追加原有PATH值而非全量覆盖,例如PATH="${BASH_REMATCH[2]}:$PATH",但这种写法存在路径优先级冲突的隐患,可能引发其他命令调用异常,不建议使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.17 16:16:00