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 自动变化,不需要手工清理缓存。
回退命中的旧缓存要谨慎对待:一般仍要跑安装命令做增量对齐,不能据前缀命中就跳过安装。
缓存路径只放公共依赖:不要缓存凭据、配置或私密产物,避免被不可信作业读取。