Composer Jenkins构建中VCS缓存指本地存储的Git仓库副本,用于复用而非重复clone;需在Jenkins中显式缓存/root/.cache/composer/vcs/、配置composer config -g cache-dir统一前缀,并排除"type": "path"仓库干扰。

Composer Jenkins 构建中 VCS 缓存到底指什么
不是指 Git 仓库本身缓存,而是指 Composer 在拉取 VCS 包(如 GitHub 上的 dev-master 分支)时,会把克隆下来的 Git 仓库副本存在本地缓存目录里,后续 install/update 就复用它,避免重复 clone。这个缓存默认在 /root/.cache/composer/vcs/(Jenkins 默认构建节点),但 Jenkins 每次用完就销毁节点,不显式配置缓存,这个目录就丢了。
Jenkins 需要手动开启 Composer VCS 缓存目录
默认构建节点(如 CODING、Jenkins 官方 Docker image)不会自动保留 /root/.cache/composer/vcs/,必须在构建计划的「变量与缓存」设置里主动勾选或录入该路径。否则每次构建都重新 clone 所有 VCS 依赖,尤其含大二进制或历史深的 repo,耗时飙升。
- 进入 Jenkins 构建任务 → 「配置」→ 「构建环境」→ 找到「缓存目录」或「变量与缓存」模块
- 勾选
/root/.cache/composer/vcs/(若列表里没有,手动添加) - 若使用自定义构建节点(如固定云服务器),路径可能是
/home/jenkins/.cache/composer/vcs/,需按实际用户 HOME 调整 - 确认 Jenkins 进程对目标目录有读写权限(常见坑:SELinux 或挂载卷权限不足)
配合 composer config --global 才真正生效
VCS 缓存路径由 Composer 自己管理,但它的行为受全局配置影响。如果没设 cache-dir,Composer 会按系统默认走;而 Jenkins 默认环境可能没初始化这个值,导致缓存写到临时位置后被丢弃。
- 在构建步骤开头加一行:
composer config -g cache-dir /root/.cache/composer - 这确保所有缓存子目录(
vcs/、files/、repo/)都落在你已声明缓存的父路径下 - 别只设
vcs/目录却让repo/写到别处——cache-dir是统一前缀,必须先设 - 验证是否生效:构建中执行
composer config -g cache-dir,输出应为/root/.cache/composer
项目含 path 类型仓库时,VCS 缓存不生效
如果你在 composer.json 的 repositories 里用了 "type": "path"(比如本地开发联调),Composer 根本不走 VCS 缓存逻辑,而是直接 symlink 或 copy。这种情况下,“VCS 缓存”完全无关,别浪费时间配它。
- 检查
composer.json是否含"type": "path"条目 - CI 环境应尽量避免
path类型,改用package或私有 Packagist 替代 - 若必须用
path,注意 Jenkins 工作空间里该路径是否存在、权限是否可读——它不经过任何缓存层
VCS 缓存真正起效的前提是:缓存目录被 Jenkins 显式保留 + cache-dir 全局指向它 + 项目没混用 path 类型仓库。三者缺一,看起来配了,其实每次都在重头 clone。











