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

Google Cloud Build无法推送制品至GCS:/tmp/lib路径匹配失败

问题排查与解决思路

排查步骤

  • 确认cmake安装的实际路径
    别光看日志提示,在cmake --install之后加一步ls -ld /tmp/lib或者find /tmp -name lib -type d,直接验证Cloud Build环境里这个目录到底存在不存在。本地能跑不代表Cloud Build的容器环境路径一致,说不定某些步骤里目录被意外清理,或者cmake实际安装路径带了子目录(比如/tmp/lib64)。
  • 检查Cloud Build的阶段隔离问题
    如果你的cloudbuild.yml分了多个steps执行,每个step默认是在不同容器里运行的!前一个step生成的/tmp/lib,到下一个step就消失了。必须把生成的目录放到跨step共享的持久化目录,比如/workspace,或者给steps配置共享volume。
  • 核对gsutil的路径参数
    确保gsutil里的路径是绝对路径,拼写没出错(比如大小写、斜杠多了少了)。可以在gsutil命令前加pwd和ls /tmp,看看当前环境的目录结构到底是什么样的。
  • 检查Dockerfile的特殊配置
    如果用了自定义Docker镜像,看看Dockerfile里有没有对/tmp做特殊处理,比如设了VOLUME /tmp或者启动时自动清理/tmp的脚本,导致cmake刚安装的目录被清空。

解决建议

  • 换用Cloud Build共享目录安装
    把cmake的安装路径改成/workspace/install这类,因为/workspace是Cloud Build跨step共享的持久化目录,不会在step之间丢失。修改cmake的CMAKE_INSTALL_PREFIX参数就行,比如:
    cmake --install . --prefix /workspace/install
    
    之后gsutil推送/workspace/install/lib就没问题了。
  • 把安装和推送放同一个step里
    如果不需要拆分步骤,直接把cmake --install和gsutil cp放同一个build step执行,这样环境是同一个,目录不会丢。比如cloudbuild.yml里这么写:
    steps:
      # 替换原来的两个step为下面这个
      - name: 'gcr.io/cloud-builders/cmake'
        entrypoint: 'bash'
        args:
          - '-c'
          - |
            cmake --install . --prefix /tmp
            gsutil cp -r /tmp/lib gs://your-bucket-target-path/
    
  • 加个debug步骤确认目录
    在gsutil之前加个bash step,先确认目录存在:
    steps:
      # ... 前面的构建、测试步骤 ...
      - name: 'gcr.io/cloud-builders/bash'
        args: ['-c', 'ls -la /tmp && find /tmp -type d -name lib']
      - name: 'gcr.io/cloud-builders/gsutil'
        args: ['cp', '-r', '/tmp/lib', 'gs://your-bucket-target-path/']
    
    从这个debug step的日志里,就能明确看到/tmp/lib到底在不在。

内容的提问来源于stack exchange,提问作者Out of Control

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 22:10:18