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

GCP CloudBuild Docker构建时Git子模块的Python依赖安装失败

GCP CloudBuild Docker构建时Git子模块的Python依赖安装失败

我帮你排查了下配置和日志,发现几个很可能导致问题的点,咱们一个个说:

1. 首先是路径笔误——这大概率是核心问题

你克隆的仓库是service.git,所以克隆完成后代码会在/workspace/service目录下,但CloudBuild配置的第三个步骤里写了cd EmailService,这明显是个错误的目录名!要改成cd service才能正确初始化和更新子模块。如果路径错了,子模块根本没在你的项目根目录下更新,后面Docker构建时自然找不到lib/db-client里的Python配置文件。

2. Docker构建的上下文不对

CloudBuild的默认工作目录是/workspace,你的项目代码在/workspace/service里,但你当前的docker build步骤用了docker build .——这会把/workspace作为构建上下文,而不是你的项目根目录。这就导致Dockerfile里的./lib/db-client路径指向的是不存在的/workspace/lib/db-client,而不是正确的/workspace/service/lib/db-client。

你需要修改docker build的参数,指定正确的上下文和Dockerfile路径:

- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/service', '-f', './service/Dockerfile', './service']

3. 可选:添加调试步骤确认文件存在

为了验证子模块是否被正确拉取,你可以在CloudBuild里加一个调试步骤,在子模块更新后列出目录内容:

# 加在第三个步骤之后,docker build之前
- name: 'gcr.io/cloud-builders/bash'
  args:
  - -c
  - |
    cd service
    echo "Checking submodule files..."
    ls -la lib/db-client/

这样你就能在CloudBuild日志里直接看到lib/db-client目录下有没有pyproject.toml或setup.py,确认子模块是否拉取完整。

4. 检查Dockerfile的工作目录

还要确认你的Dockerfile里设置了正确的工作目录,保证和本地运行的路径一致:

WORKDIR /app
COPY . .
# 之后再执行uv的命令
RUN uv pip install -e ./lib/db-client

如果WORKDIR不对,即使文件复制进去了,路径也会出错。

先把路径笔误的问题改了,应该就能解决大部分问题——毕竟所有后续操作都依赖正确的项目目录。如果还有问题,再用调试步骤确认子模块文件是否存在。

备注:内容来源于stack exchange,提问作者Connor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:48:07