CI 缓存与可复现构建:加速但不污染结果

设计稳定缓存键、依赖锁和制品校验,避免 CI 缓存引入难以复现的构建差异。

文章目录 · 4 节

CI 缓存应该只影响速度,不能影响构建结果。缓存键过宽会复用不兼容依赖,过窄则几乎没有收益。

设计缓存键

缓存键至少包含操作系统、运行时版本、包管理器和锁文件摘要。分支名可以作为回退层,但不应成为唯一键。

cache-v3-linux-node22-${LOCKFILE_HASH}

依赖下载缓存与编译输出分开管理。前者通常安全复用,后者需要包含编译器、构建参数和源码摘要。

固定依赖

CI 使用 lockfile 的严格安装模式,禁止构建过程中隐式更新版本。基础镜像和工具链也使用固定版本或 digest。

缓存失效

缓存格式升级时修改显式版本前缀。出现疑似污染时先禁用缓存重跑,比较制品哈希和依赖树。

验证可复现性

定期在空缓存环境构建两次,比较产物摘要。构建时间、随机 ID 和文件排序应被规范化,确保相同输入得到相同输出。