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

GitLab CI执行npm view查询包版本报401未授权错误排查

问题原因
  • 笔误问题:脚本中获取包名的命令写错了路径,require('.package.json') 少了路径斜杠,应为 require('./package.json'),该问题会导致读取到错误的包名,但不是触发401的核心原因。
  • 认证头缺失:npm 默认仅在 publish 这类写操作请求中携带配置的 authToken,执行 npm view 这类读元数据的GET请求时,不会主动携带认证信息,直接访问需要鉴权的GitLab包接口就会返回401。
  • 路径匹配偏差:原配置中registry地址末尾带了斜杠,npm实际发起元数据请求时路径末尾无斜杠,会导致预先配置的authToken无法匹配到请求路径,相当于未传token。
  • 权限配置问题:高版本GitLab默认关闭CI_JOB_TOKEN对包注册表的读权限,就算请求带了token也会被拦截返回401。
解决方法

按以下步骤修改配置即可:

  1. 修正包名读取的笔误,统一registry和authToken的配置路径,去掉registry地址末尾的斜杠,新增always-auth=true配置强制npm所有请求都携带token。
  2. 进入GitLab项目的 设置 > CI/CD > 令牌权限 页,开启CI_JOB_TOKEN对包注册表的访问权限。
  3. 替换原有脚本为修正后的版本:
npm-package:
  stage: build
  image: node:buster
  before_script:
    - git config --global user.name "${GITLAB_USER_NAME}"
    - git config --global user.email "${GITLAB_USER_EMAIL}"
  script:
    # 统一配置registry,去掉末尾斜杠,开启强制认证
    - npm config set @${CI_PROJECT_ROOT_NAMESPACE}:registry=https://${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm
    - npm config set //${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken=${CI_JOB_TOKEN}
    - npm config set //${CI_SERVER_HOST}/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:always-auth=true
    # 修正包名读取的路径笔误
    - NPM_PACKAGE_NAME=$(node -p "require('./package.json').name")
    - NPM_PACKAGE_VERSION=$(node -p "require('./package.json').version")
    - echo "Current package: ${NPM_PACKAGE_NAME}@${NPM_PACKAGE_VERSION}"
    - |
      # 捕获npm view的错误,首次发布时包不存在也会正常走发布流程
      VERSIONS=$(npm view "${NPM_PACKAGE_NAME}" versions 2>/dev/null || echo "")
      if [[ $VERSIONS != *"'${NPM_PACKAGE_VERSION}'"* ]]; then
        npm publish
        echo "Successfully published version ${NPM_PACKAGE_VERSION} of ${NPM_PACKAGE_NAME} to GitLab's NPM registry: ${CI_PROJECT_URL}/-/packages"
      else
        echo "Version ${NPM_PACKAGE_VERSION} of ${NPM_PACKAGE_NAME} has already been published, skip publish step."
      fi
  • 额外说明:脚本里给npm view加了错误重定向,首次发布包不存在时命令会报错,重定向后不会中断流水线,会正常执行首次发布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:18:14