首页/开发/CI/CD 与发布速查/缓存与制品的区别(Cache vs Artifacts)
流水线设计54 条

缓存与制品的区别(Cache vs Artifacts)

缓存是「可再生的加速物料」,制品是「作业间交付物并对用户可见」:混用会导致产物丢失或缓存污染。

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

缓存与制品有什么区别

缓存是可再生的加速物料(依赖目录、构建中间件),制品是作业间的交付物并对用户可见(构建产物、测试报告)。两者生命周期与语义不同:缓存可能随时被清理、命中失败只是变慢;制品按依赖关系传递与归档,丢失即流程断裂。最常见的事故是混用:把构建产物只放进缓存,缓存被清理后下游作业直接失败;或把不该外传的文件(环境文件、私钥)声明成制品,等于对项目成员泄露。

基本信息

缓存为加速后续作业;可能被清理;命中键匹配即复用
制品为传递与归档;按保留策略存储并可下载
判定口径丢了流程会断的是制品,丢了只是变慢的是缓存
GitLab 对应键cache 与 artifacts
GitHub 生态缓存动作与制品上传下载动作成对使用

对比

维度缓存 Cache制品 Artifacts
目的加速后续作业与流水线传递与归档产物
生命周期可能随时被清理按保留策略存储,可下载
命中逻辑键匹配即可复用按声明的依赖关系下载
可丢性丢了只是变慢丢了流程即断

典型使用场景

  • 依赖缓存:node_modules、pip 缓存、Go 模块缓存用缓存机制加速。
  • 构建传递:编译产物(jar、二进制、前端 dist)用制品在作业间传递。
  • 报告归档:JUnit 与覆盖率报告作为制品留存供下载与展示。
  • 缓存监控:命中率下降要能发现,缓存键改坏时不至于悄悄变慢。
  • 制品保留策略:过期时间与清理节奏按审计与复现需要设置。
  • 安全审查:制品的可见范围与内容要检查,防止机密文件被打包。

GitLab 配置

GitLab 配置
cache:
  key:
    files: [package-lock.json]   # 依赖变化即换缓存
  paths: [node_modules/]

artifacts:
  paths: [dist/]                 # 产物传递必须走制品
  expire_in: 1 week
把构建产物只放 cache:缓存被清理后下游作业直接失败,缓存永远只是可选加速层。
制品对项目成员可见:声明路径前检查目录里是否混入环境文件、密钥与调试信息。
流程正确性不依赖缓存存在:缓存命中失败要能自动回退到全量安装,只在速度上有区别。

易错点

  • 缓存 node_modules 却未锁定键:lockfile 变更后命中旧依赖,出现难以复现的幽灵问题。
  • 制品声明了不该传的目录(如环境文件、私钥):制品对项目成员可见,等于泄露。
  • 把构建产物只放 cache:缓存可能被清理且不保证存在,下游作业随机失败。
  • 制品过期时间设置随意:太短伤审计与复现,太长占空间,应按用途分层设置。
  • 忽视存储清理策略:流水线缓存与制品长期堆积,存储成本持续上升且没人负责。

数据来源与参考

  • GitLab Docs《Caching in GitLab CI/CD》
  • GitLab Docs《Job artifacts》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌