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

如何使用CloudBuild的--cache-from特性为CloudFunctions共享依赖基础

问题解答

完全可以使用Cloud Build的--cache-from特性让多个Cloud Function共用相同的依赖基础,能有效避免重复下载安装公共依赖,大幅缩短整体构建部署耗时。

你当前的流程是每次部署单个函数时,都会把当前函数代码、公共工具模块、公共依赖声明合并后直接部署,没有复用已构建好的依赖内容。我们可以通过预构建公共依赖缓存、改造构建流程拉取缓存复用两个环节实现目标。

具体改造步骤

  • 第一步:首次构建公共依赖基础镜像并推送至容器镜像仓库,作为后续所有构建的缓存源
    你可以先跑一次构建,把包含所有公共依赖(类库+localpackage工具模块)的镜像推到你项目的Artifact Registry或者Container Registry里,镜像地址示例为gcr.io/你的项目ID/gcf-common-cache:latest

  • 第二步:改造你的Cloud Build yaml配置,增加依赖安装环节并启用缓存
    改造后的配置示例如下:

steps:
  # 1. 拼接函数源码包(和原有逻辑一致)
  - name: 'bash'
    args:
      - '-c'
      - |
        echo 'Creating gcf_source directory for ${_GCF_NAME}'
        mkdir _gcf_source
        cp -r cloudfuncs/${_GCF_NAME}/. _gcf_source
        rm -f _gcf_source/readme.md
        mkdir _gcf_source/localpackage
        touch _gcf_source/localpackage/__init__.py
        cp cloudfuncs/localpackage/gcf_utils.py _gcf_source/localpackage
        echo "" >> _gcf_source/requirements.txt
        cat cloudfuncs/localpackage/requirements.txt >> _gcf_source/requirements.txt

  # 2. 复用缓存安装依赖
  - name: 'python:3.10-slim' # 替换为和你Cloud Function运行时一致的Python版本
    args:
      - '-c'
      - |
        pip install -r _gcf_source/requirements.txt -t _gcf_source/lib
    volumes:
      - name: 'pip_cache'
        path: '/root/.cache/pip'
    # 这里指定从你预存的公共缓存镜像拉取缓存
    cache_from:
      - 'gcr.io/你的项目ID/gcf-common-cache:latest'

  # 3. 部署Cloud Function,指定lib目录为依赖路径
  - name: 'gcr.io/cloud-builders/gcloud'
    args:
      - functions
      - deploy
      - ${_GCF_NAME}
      - --source=./_gcf_source
      - --runtime=python310 # 替换成你的运行时版本
# 全局指定缓存镜像,构建完成后更新缓存镜像方便后续复用
images:
  - 'gcr.io/你的项目ID/gcf-common-cache:latest'
options:
  cache_from:
    - 'gcr.io/你的项目ID/gcf-common-cache:latest'
  • 第三步:触发构建时加上--cache-from参数
    执行构建的命令调整为:
gcloud builds submit --cache-from=gcr.io/你的项目ID/gcf-common-cache:latest --config=你的配置文件.yaml

注意事项

  • 公共依赖更新时,你只需要重新跑一次缓存镜像的构建,所有后续的函数部署都会自动使用新的依赖缓存
  • 如果你的不同函数还有额外的私有依赖,只需要在对应函数自己的requirements.txt里声明即可,不会影响公共缓存的复用
  • 缓存镜像的Python版本必须和你Cloud Function使用的运行时版本保持一致,避免出现依赖兼容性问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:06:02