缓存与制品有什么区别
缓存是可再生的加速物料(依赖目录、构建中间件),制品是作业间的交付物并对用户可见(构建产物、测试报告)。两者生命周期与语义不同:缓存可能随时被清理、命中失败只是变慢;制品按依赖关系传递与归档,丢失即流程断裂。最常见的事故是混用:把构建产物只放进缓存,缓存被清理后下游作业直接失败;或把不该外传的文件(环境文件、私钥)声明成制品,等于对项目成员泄露。
基本信息
| 缓存 | 为加速后续作业;可能被清理;命中键匹配即复用 |
|---|---|
| 制品 | 为传递与归档;按保留策略存储并可下载 |
| 判定口径 | 丢了流程会断的是制品,丢了只是变慢的是缓存 |
| 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:缓存被清理后下游作业直接失败,缓存永远只是可选加速层。
制品对项目成员可见:声明路径前检查目录里是否混入环境文件、密钥与调试信息。
流程正确性不依赖缓存存在:缓存命中失败要能自动回退到全量安装,只在速度上有区别。