换镜像源是CI/CD中Composer提速的必要第一步,因默认直连packagist.org;需用项目级配置composer config repo.packagist composer https://mirrors.aliyun.com/composer/并配合--no-cache -vvv验证生效。

CI/CD 里 Composer 下载慢,不是网络问题,是默认还在直连 packagist.org —— 换镜像源不是“锦上添花”,而是必须做的第一步。
为什么 CI 中 composer config -g 总不生效
全局配置写在 ~/.composer/config.json,但 CI 环境(如 GitHub Actions、GitLab Runner、宝塔)几乎从不用你本地的用户身份运行命令。常见失效场景:
- 你在本地用
root执行了composer config -g repo.packagist ...,但 runner 是runner用户,读的是/home/runner/.composer/config.json - 宝塔「一键部署」默认以
www用户执行,sudo composer config -g写进的是root配置,完全无效 - 命令漏
-g或写成repos.packagist(多一个s),Composer 2.9.6 会静默忽略,不报错也不 fallback 提示
验证方式:在 CI 脚本中加一行 composer config -g repo.packagist,输出为空或仍是 https://packagist.org 就说明没落进目标用户配置。
composer.json 里写 repositories 才真正可靠
项目级配置能提交到 Git,所有环境行为一致,且优先级高于全局设置。正确做法是进项目根目录后运行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
这条命令会自动处理三种情况:
- 如果
composer.json原有"repositories": {}(空对象),它会安全追加 packagist 条目 - 如果已是
"repositories": [](数组),它会向末尾插入新项,不破坏已有私有源 - 如果根本没
repositories字段,它会新建并确保 key 是"packagist"(不能自定义为"aliyun")
⚠️ 别手动编辑 JSON:少一个逗号、引号不闭合、或多一个空格,都会触发 JSON decode error,CI 直接失败。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
CI 脚本里必须加 -vvv 和 --no-cache
-vvv 不是调试选项,它是唯一能确认“到底走哪个源”的证据——日志里出现 mirrors.aliyun.com 或 tuna.tsinghua.edu.cn 才算真生效:
composer install -vvv 2>&1 | grep "Downloading"
同时必须加 --no-cache,否则 CI 容器可能复用旧缓存(含官方源元数据),导致解析失败或回退到 packagist.org。完整推荐命令:
composer install --no-dev --prefer-dist --optimize-autoloader --classmap-authoritative --no-interaction --no-progress --no-cache -vvv
注意:--classmap-authoritative 仅限部署环境,本地开发禁用;--no-cache 在 CI 中必加,避免缓存污染。
换镜像后仍卡在 Resolving dependencies?和镜像无关
镜像只加速下载阶段(Downloading),而 Resolving dependencies 是纯本地计算过程。CI 中卡住的真实原因通常是:
-
PHP内存不足(COMPOSER_MEMORY_LIMIT=-1临时解决) - 启用了
xdebug(CI 中应禁用:php -d xdebug.mode=off $(which composer) install) -
composer.json中写了过宽的 PHP 版本约束,例如"php": "^7.4 || ^8.0 || ^8.1 || ^8.2" -
composer.lock里残留已下线包的引用,删掉vendor/和composer.lock后重跑composer install --no-cache
别在 CI 里反复试镜像——先确认卡点在哪一阶段,再针对性优化。最常被忽略的是:你以为在下载,其实 Composer 还在暴力求解依赖图。










