发布脚本卡在 composer install,日志最后一行是 Username。开发机不复现,因为凭据早已保存在个人全局配置中。
先看 Composer 正在访问哪个域名。Magento Marketplace、私有 Satis、GitHub 和公司 Git 需要的认证方式不同,不能把一对 key 填到所有仓库。
composer config --global --list --auth
composer diagnose
composer install --no-interaction --no-dev --prefer-dist -vvv
日志分享前删除 Authorization、token 和带凭据 URL。
CI里用受控秘密注入
把凭据放在部署平台的 Secret 中,通过 COMPOSER_AUTH 或构建时生成的临时 auth 配置提供;不要提交 auth.json 到 Git,也不要复制开发者的整个 Composer Home。密钥权限只覆盖需要的仓库,并设置轮换。
如果锁文件引用已经下线的私有 dist URL,即使 package 仍在缓存里,干净构建也会失败。用全新容器、空 Composer cache 执行一次 install,才能证明仓库与凭据完整。
最后验证非交互命令不会等待 stdin,失败时能快速返回明确的 401/403;成功构建产物中不包含 auth.json、环境变量转储或 Composer 调试日志中的秘密。

