Gitlab CI/CD无法覆盖私有项目npm依赖包registry地址问题咨询
解决方案
核心根因
你遇到的问题90%以上是由yarn.lock文件固化包下载地址导致的:yarn 1.x版本会将每个包的实际下载地址写入lock文件,该地址优先级远高于你通过yarn config set临时配置的registry,如果本地生成lock文件时用的是vue-core项目的制品库地址,CI运行时就会直接走lock中记录的地址,忽略你后续设置的js-core仓库地址。
剩余小概率是Gitlab runner缓存了旧的依赖元数据、或是yarn 1.x的已知配置优先级bug。
可落地排查步骤
- 第一步(优先验证):删除本地现有
yarn.lock文件,配置好正确的@myorg私有源后重新执行yarn install生成新的lock文件,将新lock提交到仓库后重新运行CI任务,绝大多数场景下可直接解决问题。 - 第二步:在CI的
before_script中直接写入.npmrc配置,优先级高于命令行设置的config:
echo "@myorg:registry=https://gitlab.com/api/v4/projects/${NPM_PACKAGES_PROJECT_ID}/packages/npm/" > .npmrc echo "//gitlab.com/api/v4/projects/${NPM_PACKAGES_PROJECT_ID}/packages/npm/:_authToken=${NPM_PACKAGES_PROJECT_TOKEN}" >> .npmrc yarn install --force --update-checksums
- 第三步:清理全链路缓存
- 在CI脚本中执行
yarn cache clean清理yarn本地缓存 - 进入Gitlab项目的「设置」-「CI/CD」-「流水线」页面,手动清理所有runner缓存
- 确认vue-core项目的制品库功能保持关闭状态
- 在CI脚本中执行
- 第四步(兜底验证):临时替换包管理器为npm确认问题来源,将CI配置修改为以下内容验证是否能正常拉取依赖,确认是yarn兼容性问题后可切换为npm、或是升级到yarn 3+版本:
image: node:17-alpine stages: - build - test before_script: - npm config set @myorg:registry https://gitlab.com/api/v4/projects/${NPM_PACKAGES_PROJECT_ID}/packages/npm/ - npm config set //gitlab.com/api/v4/projects/${NPM_PACKAGES_PROJECT_ID}/packages/npm/:_authToken ${NPM_PACKAGES_PROJECT_TOKEN} - npm install
内容的提问来源于stack exchange,提问作者Brennan Nunamaker
相关产品推荐
相关产品推荐

