使用GitLabNPM注册表时npm发布失败
我尝试使用新的 NPM 注册表,它现在是免费 GitLab 版本的一部分。我正在尝试创建一个 NPM 包并将其发布到我们公司的 GitLab 实例上。尝试运行时npm publish,进程退出并显示错误:
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/@sqt-klu%2fodysseus-nn-core
npm ERR! 404
npm ERR! 404 '@sqt-klu/odysseus-nn-core@0.0.1' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
npm ERR! code E404
npm ERR! 404 Not Found - PUT https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/@sqt-klu%2fodysseus-nn-core
npm ERR! 404
npm ERR! 404 '@sqt-klu/odysseus-nn-core@0.0.1' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.
通过 GitLab CI/CD 以及通过本地命令行运行时会出现此问题。
作为参考,我们内部 GitLab 的 URL 是 gitlab.myemployer.com/sqt-klu/odysseus/nn-core。因此,我认为这@sqt-klu是 GitLab 想要的范围。
CI/CD 文件(以及我一直在尝试在本地复制的文件)npm publish在此before_script阶段之前执行此操作:
- npm config set @sqt-klu:registry https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/
- npm config set https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken ${CI_JOB_TOKEN}
在本地,我的用户级 npmrc 如下(删除了实际令牌,但它是已分配所有可能范围的个人访问令牌):
audit-level=high
python=c:Python27python.exe
https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/:_authToken=redacted
@sqt-klu:registry=https://gitlab.myemployer.com/api/v4/projects/1873/packages/npm/
如果这是相关的,这里的关键内容package.json(我省略了contributors,dependencies,devDependencies,engine并author在此摘录):
我还按照这个官方指南尝试了几个不同的包名称,但无济于事。
我觉得我错过了一些非常微不足道的东西,但我坚持这一点。任何有用的指针或想法表示赞赏。
注意:我已在所有提及中替换了端点的 FQDN,以防我的雇主对此感到不满。
回答
在这种情况下,404 错误可能会令人困惑地指代凭据问题。
你应该更换
https://gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken
和:
//gitlab.myemployer.com/api/v4/projects/${CI_PROJECT_ID}/packages/npm/:_authToken
所有其他设置看起来都不错*并且应该可以工作。默认情况下,Gitlab 项目应启用包存储库功能。您可以在项目设置中启用/禁用它。
* 您可以将个人访问令牌的范围缩小到api.
当/如果您使用项目级或组织/组级部署令牌时,它们只需要read_package_registry和/或write_package_registry.