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

Google Cloud Build多阶段Docker构建如何存储Docker生成的测试制品?

问题原因

你遇到的错误是因为Cloud Build 的工作目录(/workspace)无法直接访问 Docker 构建阶段容器内部的文件。/app/test.log 是存放在 build 阶段的容器镜像里的,Cloud Build 主机环境没有这个路径,所以找不到文件。

解决方案

有两种常用的方法可以解决这个问题,根据你的需求选择即可:

方法一:从 Docker 构建阶段镜像中复制文件到 Cloud Build 工作目录

修改 cloudbuild.yaml,先构建 build 阶段的镜像,再通过临时容器将日志文件复制到 Cloud Build 的工作目录,最后上传到 GCS:

steps:
  # 1. 构建 Dockerfile 中的 build 阶段镜像
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '--target', 'build', '-t', 'go-build-image', '.']
  
  # 2. 从 build 阶段镜像中复制 test.log 到 Cloud Build 工作目录
  - name: 'gcr.io/cloud-builders/docker'
    args: ['run', '--rm', '-v', '/workspace:/output', 'go-build-image', 'cp', '/app/test.log', '/output/test.log']

# 3. 上传工作目录中的 test.log 到指定 GCS 路径
artifacts:
  objects:
    location: 'gs://mybucket/test-results/'
    paths: ['test.log']

方法二:直接在 Cloud Build 步骤中运行测试(无需在 Dockerfile 中执行)

将 go test 步骤从 Dockerfile 移到 cloudbuild.yaml 中,让测试日志直接生成在 Cloud Build 工作目录,避免跨容器文件访问的问题:

steps:
  # 1. 在 Cloud Build 环境中直接运行 go test,输出日志到工作目录
  - name: 'golang:1.23-alpine'
    entrypoint: '/bin/sh'
    args: ['-c', 'cd /workspace && go test -timeout 1m -v ./... > test.log']
    env: ['GO111MODULE=on']
    volumes:
      - name: 'go-mod-cache'
        path: '/go/pkg/mod'

  # 2. 构建最终的 Docker 镜像(如果需要)
  - name: 'gcr.io/cloud-builders/docker'
    args: ['build', '-t', 'gcr.io/$PROJECT_ID/hello-app', '.']

# 3. 上传测试日志到 GCS
artifacts:
  objects:
    location: 'gs://mybucket/test-results/'
    paths: ['test.log']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:04:56