fix(ci): Web构建改用layer缓存替代cache mount,根治node_modules缓存损坏 #521
Reference in New Issue
Block a user
Delete Branch "fix/web-build-cache-mount"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
问题
Web构建连续4轮失败(从#518开始),根因是
--mount=type=cache,target=/app/apps/web/node_modules的BuildKit cache mount缓存损坏,里面缺少vitest、typescript等关键依赖。Cache mount数据只存在buildx builder本地卷里,不走ACR,内容完整性无保障,一旦损坏所有后续构建连锁失败。
修复
移除node_modules的cache mount,改为写入镜像layer,走ACR缓存:
--cache-from/--cache-to type=registry走ACR,跨runner共享保留的cache mount(不影响正确性,只是加速):
/root/.npm— npm下载缓存.tscache— TS增量编译缓存影响
🚀 预览环境已部署
CI全绿,自动审批通过。
CI全绿,自动审批通过。
代码审查结果 - PR #521
⚠️ 问题(0个需要修改)
无
💡 建议(1个可选)
.npmrc配置),当前的npm config set registry可能会覆盖源内的配置或导致私有包拉取失败。建议确认是否需要保留.npmrc文件或调整注册表配置策略。✅ 格式检查通过 | ✅ 逻辑审查通过 | ✅ 性能优化合理
📊 审查概览
❌ 需修改的问题(严重)
无
💡 改进建议(一般)
npm ci前执行了npm config set registry https://registry.npmmirror.com。这会将全局注册表锁定为淘宝镜像。如果项目中包含需要从私有源拉取的包(通常配置在.npmrc中),可能会导致解析失败。建议确认项目是否完全依赖公共包,或者考虑将.npmrc文件(如果存在)在npm ci之前复制到工作目录,以确保配置优先级正确。✅ 良好实践
node_modules从 BuildKit cache mount 转移到镜像层存储,利用 ACR(或其它镜像仓库)的层缓存机制。这在 CI/CD 环境中能有效利用远程缓存,避免因本地缓存失效导致的完全重新构建,提升了构建的确定性和复用性。npm ci而非npm install,确保了package-lock.json的版本一致性,符合生产环境构建的最佳实践。/root/.npm的 cache mount 用于加速下载包,同时将构建产物持久化到层中,兼顾了速度与正确性。🤖 由 AI 代码审查机器人自动生成 | 2026-07-18 16:04:27 | 模型: