首页/开发/CI/CD 与发布速查/GitHub Actions 缓存
工具链要点63 条

GitHub Actions 缓存

用 actions/cache 缓存依赖目录:key 常用锁文件哈希,restore-keys 提供前缀回退;缓存按仓库额度管理与淘汰。

CI/CD 与发布速查开发更新于 2026-10-13

Actions 缓存是什么

GitHub Actions 用 actions/cache 缓存依赖目录,把每次流水线重复下载的依赖(npm、pip、Go module 等)打包保存,命中后直接解包恢复,省掉重复下载时间。匹配逻辑是两级:key 精确匹配(建议包含运行系统与锁文件哈希,依赖一变 key 就变);没命中时按 restore-keys 前缀回退到最近的旧缓存,再用新 key 存一份。缓存由平台按仓库统一管理:仓库有总量上限、长期未访问的条目会被自动淘汰,超限时也腾退最旧的条目。setup-* 系列动作自带缓存参数(如 setup-node 的 cache: npm),不必手写。

基本信息

key唯一键,建议含 OS 与锁文件哈希
restore-keys前缀回退匹配,命中旧缓存
额度仓库级总量上限,长期未访问被淘汰
内置setup-* 动作自带缓存参数
隔离主分支缓存对 PR 可见,PR 新建缓存不回灌主分支

典型使用场景

  • npm/pip/go 依赖缓存:最典型用法,锁文件哈希进 key。
  • 工具链下载目录:把编译器、二进制安装缓存起来。
  • monorepo 分片:按包或路径分 key,避免单包过大频繁失效。
  • 多生态仓库:每种语言一条缓存,前缀各自独立。
  • 排查未命中:对比两次运行的 key 与 restore-keys 前缀找原因。
  • 容器构建提速:用 registry 或缓存后端导出镜像层(进阶)。

缓存 npm

缓存 npm
- uses: actions/cache@v4
  with:
    path: ~/.npm  # 缓存依赖下载目录
    key: npm-${{ runner.os }}-${{ hashFiles('package-lock.json') }}  # 锁文件进 key
    restore-keys: |
      npm-${{ runner.os }}-  # 未命中时回退同系统旧缓存

配置项读法

配置作用建议
path要缓存与恢复的目录只放下载目录,别放构建产物
key精确匹配键含 OS 与锁文件哈希
restore-keys前缀回退按依赖生态分前缀
cache-hit精确命中输出用于判断能否跳过部分步骤
锁文件进 key:依赖一更新 key 自动变化,不需要手工清理缓存。
回退命中的旧缓存要谨慎对待:一般仍要跑安装命令做增量对齐,不能据前缀命中就跳过安装。
缓存路径只放公共依赖:不要缓存凭据、配置或私密产物,避免被不可信作业读取。

易错点

  • key 不含锁文件哈希:依赖升级后仍用旧缓存,装出与锁文件不一致的版本;锁文件哈希进 key。
  • 缓存整个 node_modules:体积大且易与锁文件漂移,改缓存下载目录。
  • 误以为缓存永久保存:超容量或长期未访问会被清掉,流程逻辑不能依赖缓存存在。
  • 多语言共用前缀:互相覆盖导致频繁失效,每生态独立前缀。
  • 把敏感文件放进缓存:缓存可被后续作业恢复,等于扩大泄露面。

数据来源与参考

  • GitHub Docs《Caching dependencies to speed up workflows》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌