You need to enable JavaScript to run this app. Gitlab CI多分支部署场景下PHPStan缓存目录膨胀优化方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI多分支部署场景下PHPStan缓存目录膨胀优化方案咨询

优化方案

方案1:分支独立缓存(最优,无需额外维护)

直接将PHPStan缓存目录绑定到对应分支的专属部署目录,从根源避免全局缓存目录堆积:

  • 修改CI执行命令,通过--tmp-dir参数指定当前分支目录下的缓存路径,示例如下:
    cd /data/www/branch-1
    # 提前创建分支专属缓存目录
    mkdir -p ./tmp/phpstan
    bin/phpstan analyze --level 1 --no-progress --tmp-dir ./tmp/phpstan
    
  • 优势:缓存完全跟随分支部署目录生命周期,分支下线删除部署目录时缓存会同步清理,不会产生残留文件,同时完全不影响缓存命中性能。

方案2:全局缓存精细化清理(适配必须共用全局缓存的场景)

如果因为架构限制必须使用/tmp/phpstan作为全局缓存目录,可以将定时全量删除调整为按访问时间清理不活跃缓存:

  • 定时任务改为清理超过指定时间(比如7天)未被访问的缓存文件,示例命令:
    # 清理7天未访问的文件
    find /tmp/phpstan -type f -atime +7 -delete
    # 清理残留空目录
    find /tmp/phpstan -type d -empty -delete
    
  • 优势:活跃分支的热缓存会被保留,不影响性能,只有长期不用的旧分支缓存会被清理,可控性更高。

方案3:对接Gitlab CI原生缓存机制

如果你的CI任务是在临时执行机上运行、部署目录执行完即销毁,可以直接用Gitlab CI自带的缓存能力托管PHPStan缓存:

  • 在.gitlab-ci.yml中添加按分支隔离的缓存配置:
    phpstan-check:
      stage: test
      cache:
        key: "$CI_COMMIT_REF_SLUG-phpstan"
        paths:
          # 缓存目录放在当前CI工作区
          - phpstan-cache/
        # 仅拉取缓存,执行完后更新缓存
        policy: pull-push
      script:
        - mkdir -p phpstan-cache
        - bin/phpstan analyze --level 1 --no-progress --tmp-dir ./phpstan-cache
    
  • 优势:缓存由Gitlab统一管理,会自动清理超出存储配额、长期未使用的旧缓存,无需自行维护执行机的本地目录,还支持跨执行机复用缓存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 22:18:03