Windows Jenkins节点向Artifactory发布npm包失败求助
解决Windows Server Jenkins从节点npm Publish 403/EPERM错误
结合你给出的环境(Windows Server 2008 R2、npm 5.7.1、Node.js 8.10.0)和错误信息,这个问题大概率是Artifactory权限配置或Windows系统目录权限导致的,咱们一步步来排查解决:
1. 先搞定Artifactory的403权限问题
403是仓库直接返回的拒绝,这是发布失败的核心原因之一:
- 先确认你用来发布的npm账号,在Artifactory的
npm-internal仓库里拥有Deploy(发布)权限。登录Artifactory后台,到「Permissions」页面检查对应用户/组的权限,确保勾选了Deploy权限。 - 检查npm是否正确配置了Artifactory的认证信息:
执行命令:
如果返回空或者无效的token,就重新登录:npm config get //artifactory/artifactory/api/npm/npm-internal/:_authToken
登录时输入的账号密码必须是Artifactory后台有发布权限的账号。npm login --registry=https://artifactory/artifactory/api/npm/npm-internal
2. 解决Windows系统的EPERM文件权限错误
错误里提到了C:\Windows\TEMP目录的权限问题,Jenkins从节点的运行用户可能没有这个临时目录的读写权限:
- 找到
C:\Windows\TEMP文件夹,右键「属性」→「安全」选项卡,检查Jenkins服务的运行用户(通常是Local System或专门的Jenkins账号)是否拥有修改、写入权限。如果没有,添加对应权限并应用。 - 也可以绕开系统TEMP目录,给npm指定自定义临时目录:
在Jenkins构建步骤里,先设置环境变量(提前创建C:\Jenkins\tmp并给Jenkins用户权限):
然后再执行SET npm_config_tmp=C:\Jenkins\tmpnpm publish命令。
3. 版本兼容性优化(可选但推荐)
你用的npm 5.7.1和Node.js 8.10.0虽然官方兼容,但旧版本在Windows Server 2008上可能存在已知的权限bug:
- 升级npm到5.x系列的最新稳定版:
npm install -g npm@5.10.0 - 或者升级Node.js到8.x的最后一个稳定版(8.17.0),修复一些旧版本的Windows兼容性问题。
4. Jenkins构建环境的额外检查
- 确保Jenkins从节点的工作空间目录、npm依赖安装目录、打包生成的目录,Jenkins用户都有完整的读写权限。
- 如果用Jenkins的npm插件执行发布,别忘了在插件配置里指定正确的registry和认证信息,或者直接在构建脚本里显式设置。
最后,可以先清理npm缓存再试发布:
npm cache clean --force npm publish --registry https://artifactory/artifactory/api/npm/npm-internal
内容的提问来源于stack exchange,提问作者Oron Bortman
相关产品推荐
相关产品推荐

