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
相关产品推荐
相关产品推荐

