You need to enable JavaScript to run this app. Gitlab使用semantic-release发布私有npm仓库误访问公有仓报错
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab使用semantic-release发布私有npm仓库误访问公有仓报错

这是配置错误导致的问题,和版本兼容性无关,按以下步骤修改即可:

1. 修正 package.json 配置

首先将private字段改回false,然后修改publishConfig,补充顶层registry和access配置,避免插件读取默认公有源:

"publishConfig": {
    "@mygroup:registry": "https://gitlab.com/api/v4/projects/XXXXXX/packages/npm/",
    "registry": "https://gitlab.com/api/v4/projects/XXXXXX/packages/npm/",
    "access": "public"
}

注意:access设为public是作用域包发布到私有仓库的必填配置,否则会被识别为私有包跳过发布

2. 修正 .npmrc 配置

你当前的配置存在两个问题:一是作用域源地址和publishConfig不一致,二是配置行多了冗余引号,修改为以下内容即可:

//gitlab.com/api/v4/projects/XXXXXX/packages/npm/:_authToken=YYYYYYYYYYYYYYYYY
@mygroup:registry=https://gitlab.com/api/v4/projects/XXXXXX/packages/npm/

不需要保留组级npm源的冗余配置,统一使用项目级npm源地址即可

3. 修正 .releaserc.json 配置

  • 移除@semantic-release/gitlab插件下的空verifyConditions配置,避免跳过必要的权限校验
  • 给@semantic-release/npm插件显式指定registry地址,强制使用私有源
    修改后的完整配置:
{
    "branches": ["main"],
    "plugins": [
      "@semantic-release/commit-analyzer",
      "@semantic-release/release-notes-generator",
      [
        "@semantic-release/gitlab",
        {
          "gitlabUrl": "https://gitlab.com",
          "gitlabApiPathPrefix": "/api/v4"
        }
      ],
      [
        "@semantic-release/npm",
        {
          "registry": "https://gitlab.com/api/v4/projects/XXXXXX/packages/npm/"
        }
      ],
      [
        "@semantic-release/git",
        {
          "assets": ["package.json"],
          "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
        }
      ]
    ]
  }

4. 修正 .gitlab-ci.yml 配置

移除冗余的git凭证配置,避免和semantic-release的自动鉴权逻辑冲突,修改后的配置:

default:
  image: node:14.17

stages:
  - publish

Publish:
  stage: publish
  script:
    - npm ci
    - npm run semantic-release --debug

*不需要在CI脚本中硬编码令牌,直接在Gitlab项目后台的「设置- CI/CD -变量」中配置以下变量即可:

  • GL_TOKEN:勾选了api、read_repository、write_repository权限的个人访问令牌
  • NPM_TOKEN:和GL_TOKEN使用相同的值即可*

错误原因说明

你之前的问题核心是@semantic-release/npm v7版本没有读取到正确的私有源配置:当publishConfig没有顶层registry字段时,插件会回退到npm默认的公有源https://registry.npmjs.org进行鉴权,和你配置的作用域源无关。而你将private设为true后不报错,是因为semantic-release默认会跳过私有包的npm发布步骤,没有执行鉴权逻辑而已。

本地验证方法

修改完配置后可以先执行以下命令验证配置是否生效:

  1. 执行npm config get @mygroup:registry,确认返回你的私有仓库地址
  2. 执行npm whoami --registry=https://gitlab.com/api/v4/projects/XXXXXX/packages/npm/,确认返回你的Gitlab用户名,代表令牌权限正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:42:02