我过去常常使用包含发布阶段的DSL管道将我的NPM项目发布到Nexus:
stage ('Publish') {
nodejs(nodeJSInstallationName: 'Node LTS', configId: '123456ab-1234-abcd-1234-f123d45e6789') {
sh 'npm publish'
}
}
我有一个名为&#34的NodeJS安装; Node LTS"在我的Jenkins和带有此configId的npmrc配置文件中。
现在我想将此阶段导出到一个常规的SharedLib中。 根据{{3}}和Declarative Pipeline documentation,我可以这样写:
stage('Publish') {
tools {
nodejs 'Node LTS'
}
steps {
sh 'npm publish'
}
}
但是这不会设置当前在我的npmrc配置文件中的身份验证配置:
registry=http://my-nexus/repository/npm-private/
_auth="some=base=64=credential=="
always-auth=true
是否有想法使用声明性语法检索此配置并阻止此错误消息?
npm ERR! code ENEEDAUTH
npm ERR! need auth auth required for publishing
npm ERR! need auth You need to authorize this machine using `npm adduser`
答案 0 :(得分:3)
看一下npm日志文件和阅读文档,我终于找到最好的解决方案是在package.json文件中指定以下发布配置:
{
"name": "@my-company/my-project",
...
"publishConfig": {
"registry": "http://my-nexus/repository/npm-private/"
},
...
}
我离开.npmrc
配置:
registry=http://my-nexus/repository/npm-private/
_auth="some=base=64=credential=="
always-auth=true
注意:对于自动化脚本,我需要always-auth
:https://docs.npmjs.com/misc/config