如何调试'npm ERR!403 在大多数情况下,您或您的依赖项之一正在请求您的安全策略禁止的包版本。

and*_*mel 38 nexus npm typescript jenkins-pipeline

我目前正在尝试设置一个 Jenkins 和一个私有 npm 存储库(Sonatype Nexus)。当我尝试在 Jenkins 构建管道中发布到存储库时,出现以下错误。

+ npm publish --registry https://<my-private-registry>/repository/npm-private/
npm notice 
npm notice package: ts-acoustics@0.0.0
npm notice === Tarball Contents === 
npm notice 2.4kB  Jenkinsfile                       
...
('notice' level info about the files)
...
npm notice === Tarball Details === 
npm notice name:          ts-acoustics                            
npm notice version:       0.0.0                                   
npm notice package size:  13.8 kB                                 
npm notice unpacked size: 47.5 kB                                 
npm notice shasum:        554b6d2b41321d78e00f6a309bb61c9181a2e3d6
npm notice integrity:     sha512-QtExdu6IqZ+lH[...]r+HXolo4YCFPg==
npm notice total files:   17                                      
npm notice 
npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT https://<my-private-registry>/repository/npm-private/ts-acoustics
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.
Run Code Online (Sandbox Code Playgroud)

我没有找到更多关于为什么在 Nexus 日志中被禁止的信息,这个开放的 GitHub 错误告诉我,在大多数情况下,上述错误文本都指向错误的方向?!

知道如何继续进行出版工作吗?!


更新 1:我刚刚看到当我尝试手动发布时遇到了同样的问题!因此,出于简单的原因,Jenkins 不在考虑范围之内。

更新 2:我可以做npm adduser --registry...,npm 告诉我

Logged in as <my-user> on https://<my-private-registry>/repository/npm-private/.
Run Code Online (Sandbox Code Playgroud)

当我这样做时,npm whoami --registry...它会显示正确的用户名。

当我npm publish --registry...在项目中执行时,它显示 403 错误

Cal*_*ter 81

如果您像我一样遵循 Node Cookbook 示例,或者您刚刚创建帐户的其他示例,那么您的错误可能与我的一样。

我没有验证我的电子邮件地址并收到同样的错误(这是一个新帐户)。一旦我验证,它就可以工作(即使在 VPN 上)。

检查您的电子邮件并验证您的帐户。

  • 谢谢,这解决了我的问题。理想情况下,NPM 团队应该在日志文件中写入正确的错误消息。 (9认同)
  • 等等,什么!!电子邮件!!哦,我浪费了将近 3 个小时试图解决这个问题,直到我最终来到这里。再次感谢! (3认同)
  • 好吧,你让我质疑我的职业选择。虚拟拥抱任何人?PS问题解决了。 (2认同)

小智 14

这主要发生在两种场景

  1. 该错误可能是由于公共包冲突而导致的。只需更改其中的包名称,package.json然后重试即可!

  2. 您可能最近注册了,但忘记验证电子邮件。因此,您可以登录此链接: https: //www.npmjs.com/login

    在标题上,您将看到一个选项,用于将验证链接发送到您的电子邮件。完成验证后,尝试再次发布。

备注:2)为我工作。


Ank*_*aha 12

在发布时更新包版本为我解决了这个问题。

在此输入图像描述


Sam*_*ein 10

我在发布到 JFrog Artifactory 时遇到了同样的错误。这是由于存储库中已经存在同名包的结果。要解决此问题,请删除旧软件包或更改新软件包的版本/名称。


and*_*mel 8

如何调试这个:

正如您从所有答案中看到的,有很多事情会导致相同的失败消息。您可以通过以下方法找到根本原因:

在 Nexus Repository Manager ->菜单项“Logging”
中,您可以简单地更改 Nexus 在运行时包含的每个 java 包的日志级别。

将包的所有 LogLevel(包括“security”或“rest”)更改为 TRACE 并再次触发您的请求。

LogViewer(也是 Nexus 的一部分)中,您现在有望看到理解问题所需的所有信息。


就我而言,我必须向nx-repository-view-*-*-edit为 Jenkins 用于登录 Nexus 的用户创建的角色添加权限。我认为nx-repository-view-*-*-add足够发布了。

希望能帮助到你!