You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab Runner CI/CD缓存异常:部分Job无法读取node_modules

解决GitLab Runner缓存部分Job失效问题

排查方向及解决方案

1. 核对缓存键一致性

  • 检查CDK Job是否存在自定义缓存配置,覆盖了全局基于pnpm-lock.yaml生成缓存键的规则。比如个别Job可能额外引入了CI_JOB_NAME、NODE_VERSION这类变量到缓存键中,导致和Lint Job的缓存键不匹配。
  • 对比CDK Job与Lint Job日志中的缓存键字段,确认两者完全一致。

2. 验证缓存内容完整性

  • 在.pre阶段的安装Job末尾添加命令,确认缓存目录内容:
    ls -la node_modules/
    ls -la .pnpm-store/
    
  • 在CDK Job拉取缓存后立即执行同样的目录查看命令,排查是缓存未拉取到,还是后续步骤误删了依赖文件。

3. 解决并发缓存竞争问题

  • 由于Runner并发数设为4,可能出现.pre阶段缓存未完成推送,CDK Job就提前拉取到不完整缓存的情况。临时将并发数改为1测试,若问题消失:
    • 给CDK Job添加依赖,确保其在.pre阶段安装Job完成后再执行,示例:
      cdk-job:
        stage: deploy
        needs: [.pre]
        # 其他配置
      

4. 调整pnpm缓存策略

  • pnpm的node_modules依赖于.pnpm-store的硬链接/符号链接,直接缓存node_modules可能导致恢复时链接失效。改用以下流程:
    • .pre阶段:执行pnpm install后,运行pnpm store prune清理冗余缓存,仅缓存.pnpm-store
    • 其他Job:执行pnpm install --offline,通过本地缓存的.pnpm-store恢复依赖

5. 检查缓存存储权限与访问性

  • 若使用本地缓存,检查Runner节点上缓存目录的读写权限,确保CDK Job的运行用户拥有访问权限。
  • 若使用远程缓存(如对象存储),确认CDK Job所在Runner节点能正常访问缓存服务,无网络或权限限制。

内容的提问来源于stack exchange,提问作者Matt Gallik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:15:55