You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab CI安装Gitlab私有NPM包时授权失败问题排查

问题:GitLab CI中安装私有npm包出现401未授权错误

背景信息

  • 两个同属frontend组的GitLab项目:
    • 包发布项目:https://gitlab.com/company/frontend/design-system-package
    • 依赖使用项目:https://gitlab.com/company/frontend/design-system-app
  • 创建了权限为read_package_registry的Deploy Token,命名为PACKAGE_ACCESS_TOKEN

当前CI配置(.gitlab-ci.yml)

image: node:16.14.2

pages:
  cache:
    paths:
      - node_modules/
  script:
    - echo "//${CI_SERVER_HOST}/api/v4/projects/<projectNumber>/packages/npm/:_authToken=${PACKAGE_ACCESS_TOKEN}">.npmrc
    - npm install
    - npm run build

  artifacts:
    paths:
      - public

  only:
    - main

注:此处填写的<projectNumber>是依赖使用项目的编号,而非包发布项目的编号

CI执行错误信息

$ npm config set -- //gitlab.com/api/v4/projects/XXXXXX/packages/npm/:_authToken=${PACKAGE_ACCESS_TOKEN}
$ npm config set @companyName:registry=https://gitlab.com/api/v4/projects/XXXXXX/packages/npm/
$ npm install
npm ERR! code E401
npm ERR! 401 Unauthorized - GET https://gitlab.com/api/v4/projects/39790545/packages/npm/@companyName/kb/-/@companyName/kb-0.0.10.tgz
npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2023-03-14T20_27_58_496Z-debug-0.log
Cleaning up project directory and file based variables
00:01
ERROR: Job failed: exit code 1

本地正常工作的.npmrc配置

@company:registry=https://gitlab.com/api/v4/packages/npm/
//gitlab.com/api/v4/packages/npm/:_authToken=${PACKAGE_ACCESS_TOKEN}

本地已配置同名环境变量PACKAGE_ACCESS_TOKEN

问题原因与解决方案

核心问题

CI配置中错误使用了依赖使用项目的编号,且配置的项目级仓库地址与私有包实际存储的包发布项目仓库不匹配;同时CI的registry配置和本地的组级仓库配置不一致,导致npm请求地址错误或权限验证失败。

解决方案

有两种可行配置方式:

方式1:使用组级npm仓库(推荐,同组项目适配性更强)

修改CI的script部分,和本地配置保持一致,使用组级registry:

script:
  - echo "@company:registry=https://gitlab.com/api/v4/packages/npm/" >> .npmrc
  - echo "//gitlab.com/api/v4/packages/npm/:_authToken=${PACKAGE_ACCESS_TOKEN}" >> .npmrc
  - npm install
  - npm run build

这种配置下,npm会自动在组级仓库中检索同组内所有项目发布的私有包,只要Deploy Token具备组级的read_package_registry权限即可正常访问。

方式2:使用项目级npm仓库(指定包发布项目)

若需使用项目级地址,必须填写包发布项目的编号(即错误日志中出现的39790545),而非依赖使用项目的编号:

script:
  - echo "@companyName:registry=https://gitlab.com/api/v4/projects/<包发布项目编号>/packages/npm/" >> .npmrc
  - echo "//gitlab.com/api/v4/projects/<包发布项目编号>/packages/npm/:_authToken=${PACKAGE_ACCESS_TOKEN}" >> .npmrc
  - npm install
  - npm run build

额外检查项

  • 确认Deploy Token已勾选read_package_registry权限
  • 确认CI环境变量PACKAGE_ACCESS_TOKEN已正确设置(可在项目Settings > CI/CD > Variables中配置,组级变量需确保项目能继承)

内容的提问来源于stack exchange,提问作者sebazelonka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 07:23:36