CI中必须显式配置镜像源,因默认直连packagist.org极大概率超时;推荐用COMPOSER_REPO_PACKAGIST环境变量(Composer 2.2+)或composer config repositories.packagist.org.url临时写入,URL须HTTPS且末尾带/,并验证生效。

CI中执行composer install前必须切换镜像源
不手动干预时,Composer默认走官方源(packagist.org),在CI环境中极大概率超时失败。关键不是“能不能用”,而是“要不要显式锁定”——CI节点无用户配置、无缓存、无交互,必须把源写死在命令里或配置中,否则行为不可控。
- 不要依赖本地
~/.composer/config.json:CI容器每次都是干净环境 - 优先用
--repository-url参数临时指定,比改全局配置更安全、更可追溯 - 国内推荐阿里云源:
https://mirrors.aliyun.com/composer/;腾讯云、华为云也有对应镜像,URL末尾必须带/
composer config写入临时源只对当前项目生效
如果项目已提交composer.json但没锁源,可在CI脚本中先运行composer config写入,再执行安装。注意它修改的是当前目录下的composer.json(或生成composer.lock时生效),不会污染全局。
- 命令示例:
composer config repositories.packagist.org.url https://mirrors.aliyun.com/composer/ - 该操作会向
composer.json写入repositories字段,CI结束后可忽略,不影响本地开发 - 若项目已存在
repositories配置,需确认是否覆盖了packagist.org别名,否则镜像不生效
使用COMPOSER_REPO_PACKAGIST环境变量最轻量
Composer 2.2+ 支持通过环境变量覆盖默认源,无需修改文件或加额外参数,适合CI脚本一键注入。
- 设置方式:
COMPOSER_REPO_PACKAGIST=https://mirrors.aliyun.com/composer/ composer install - 仅影响
packagist.org这个逻辑源,不影响其他自定义repositories - 低于2.2版本不识别该变量,CI中建议先检查
composer --version,或统一升级到2.2+
镜像源还原失败的典型现象和排查点
常见报错如Could not fetch https://repo.packagist.org/packages.json或Failed to decode response,本质是请求没走到镜像站。不是网络问题,而是配置没生效。
- 检查是否拼错URL:漏掉
https://或末尾/会导致重定向失败 - 确认
composer install是否加了--no-interaction:有交互提示时会卡住,但和镜像无关 - 运行
composer config --list | grep repository看实际生效的源,避免被vendor/composer/installed.json残留配置干扰 - Docker CI中注意
WORKDIR是否正确,composer config写入位置错位会导致无效
镜像源本身没问题,问题永远出在“你以为它生效了,其实没有”。CI里每一步都要可验证,不能靠推测。











