gitlab ci中composer缓存需同时配置vendor/和$home/.composer/cache,缓存key须含项目id、分支、任务名并用restore-keys前缀匹配,私有包认证用masked变量生成auth.json,仓库声明需vcs类型且https url带.git后缀。

缓存 vendor 和 ~/.composer/cache 必须同时配置
只缓存 vendor/,下次 composer install 还得重新下载 ZIP 包;只缓存 ~/.composer/cache,vendor/ 每次重建,等于白缓存。GitLab CI 的 Composer 缓存生效的前提,是两个路径都进 cache.paths。
-
paths下必须写两行:vendor/和$HOME/.composer/cache/ -
$HOME/.composer/cache在 GitLab 官方 Runner 镜像里默认存在,不用mkdir -p,但私有 Runner 若以root运行,$HOME是/root,得确认该路径可写 - 别用
composer global config cache-dir改路径——引入额外变量,CI 环境难复现、难调试
缓存 key 要反映依赖真实状态,restore-keys 是 fallback 不是兜底
缓存 key 写成固定字符串(比如 composer-cache),会导致不同分支、不同 PHP 版本共用同一份缓存,轻则安装失败,重则 vendor 里混进不兼容的扩展。
- 推荐第一级 key:
${CI_PROJECT_ID}-composer-${CI_COMMIT_REF_SLUG}-${CI_JOB_NAME}—— 精确匹配同项目、同分支、同任务的上一次缓存 - restore-keys 加一行:
${CI_PROJECT_ID}-composer-main-—— feature 分支刚建时,能 fallback 到 main 分支缓存,冷启更快 - restore-keys 只支持前缀匹配,末尾不能加通配符(如
-*无效) - 不要把 PHP 版本硬编码进 key(如
php8.2-composer),而应通过PHP_VERSION变量注入,避免手动维护出错
私有包认证必须走 auth.json 文件,别碰全局 config
composer config --auth --global 在 CI 里基本不可靠:容器每次新建,~/.composer/auth.json 会被覆盖或忽略;更糟的是,一旦触发交互式提示(比如没加 --no-interaction),job 直接卡死。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
.gitlab-ci.yml里用echo "$COMPOSER_AUTH_JSON" > auth.json生成文件,值来自 GitLab UI 中新建的 masked 变量 - 变量值必须是合法 JSON 字符串,填的时候用单引号包裹:
'{"http-basic":{"your.packagist.example.com":{"username":"token","password":"abc123"}}}' - 执行
composer install时显式指定:composer install --auth-file=auth.json --no-interaction --prefer-dist - 加一行校验:
cat auth.json | php -r "json_decode(file_get_contents('php://stdin')) or die('invalid json');",JSON 错了立刻报错,不等 composer 静默失败
拉取私有 GitLab 仓库要显式声明 vcs + 正确协议 + 分支格式
直接在 require 里写 "mygroup/mypackage": "dev-main",但没配 repositories,Composer 根本不知道去哪找——它不会自动猜你内部 GitLab 的地址,也不会自动加 Token。
-
repositories必须放在composer.json顶部,且类型为"type": "vcs";顺序很重要,私有源要排在packagist.org前面 - HTTPS 方式 URL 必须带完整域名和
.git后缀:"https://oauth2:YOUR_TOKEN@gitlab.example.com/mygroup/mypackage.git",其中oauth2:是 GitLab 固定前缀 - SSH 方式需提前注入密钥,并确保
known_hosts里有目标 GitLab 主机记录;URL 必须是git@gitlab.example.com:mygroup/mypackage.git格式 - 分支名必须带
dev-前缀(如dev-main),不能只写main;包名大小写必须和目标仓库composer.json中的"name"完全一致
缓存、认证、仓库声明这三块,任意一块漏掉或写错,composer install 就会变慢、失败或行为诡异。最常被忽略的是 restore-keys 的前缀匹配规则和 auth.json 的 JSON 引号处理——看着配置全了,其实根本没生效。










