Jenkins上传npm构建产物到Nexus时返回500错误的原因与解决方案
Jenkins构建npm项目上传Nexus时出现500错误的原因及解决办法
我在Jenkins日志中发现如下500错误,请问将npm项目构建后上传至Nexus时出现该错误的原因是什么?该如何解决?
日志内容:
http fetch PUT 500 http://172.**.***.***:8081/repository/front/project1 73402ms attempt #3 verbose stack Error: 500 Server Error - PUT http://172.**.***.***:8081/repository/front/project1l verbose stack at /var/jenkins_home/.nvm/versions/node/v14.20.0/lib/node_modules/npm/node_modules/npm-registry-fetch/check-response.js:117:15 verbose stack at processTicksAndRejections (internal/process/task_queues.js:95:5) verbose statusCode 500 verbose pkgid izboom-developerportal@1.1.16149 verbose cwd /var/jenkins_home/workspace/project1 verbose Linux 3.10.0-1160.76.1.el7.x86_64 verbose argv "/var/jenkins_home/.nvm/versions/node/v14.20.0/bin/node" "/var/jenkins_home/.nvm/versions/node/v14.20.0/bin/npm" "publish" verbose node v14.20.0 verbose npm v6.14.17 error code E500 error 500 Server Error - PUT http://172.**.***.***:8081/repository/front/project1 verbose exit [ 1, true ]
可能原因
- Nexus仓库配置异常:目标仓库类型不符合要求(npm上传需要hosted类型仓库),或仓库路径拼写错误(日志中出现
project1l,疑似笔误),亦或是仓库未开启部署权限 - 权限不足:Jenkins使用的npm账号没有Nexus目标仓库的部署(上传/编辑)权限
- Nexus服务器故障:服务器磁盘空间不足、服务进程异常,或请求超时触发服务器内部错误
- npm包问题:包版本已存在且Nexus禁止覆盖,或package.json的元数据格式不符合规范
- 网络不稳定:Jenkins与Nexus之间的网络延迟过高、连接中断,导致请求失败返回500
解决办法
- 检查Nexus仓库配置
- 确认目标仓库为hosted类型的npm仓库,且在仓库设置中开启「Allow Redeploy」(若需要覆盖已有版本)
- 核对日志中的上传URL,修正路径拼写错误(比如日志里的
project1l需确认是否为实际仓库名)
- 验证权限配置
- 登录Nexus管理后台,检查Jenkins所用账号是否拥有目标仓库的
nx-repository-view-npm-*-add和nx-repository-view-npm-*-edit权限 - 在Jenkins工作目录执行
npm config get registry验证仓库地址配置,执行npm config get //172.**.***.***:8081/repository/front/:_authToken确认认证令牌有效
- 登录Nexus管理后台,检查Jenkins所用账号是否拥有目标仓库的
- 排查Nexus服务器状态
- 登录Nexus查看系统存储状态(路径:Administration → System → Storage),确保磁盘空间充足
- 查看Nexus日志文件(默认路径
sonatype-work/nexus3/log/nexus.log),定位500错误的具体原因 - 尝试重启Nexus服务,恢复异常进程
- 检查npm包合法性
- 登录Nexus仓库确认
izboom-developerportal@1.1.16149版本是否已存在,若存在则修改package.json中的版本号后重新构建 - 校验package.json格式,确保name、version等字段符合npm规范
- 登录Nexus仓库确认
- 优化网络连接
- 在Jenkins服务器执行
ping 172.**.***.***和telnet 172.**.***.*** 8081测试网络连通性 - 调整npm超时阈值:执行
npm config set fetch-retry-mintimeout 15000增加请求超时时间
- 在Jenkins服务器执行
内容的提问来源于stack exchange,提问作者Ali farahzadi
相关产品推荐
相关产品推荐

