node.js - 编写 Jenkins 管道共享库以发布到 Nexus NPM 存储库

标签 node.js jenkins jenkins-pipeline jenkins-declarative-pipeline

我过去常常使用包含发布阶段的 DSL 管道将我的 NPM 项目发布到 Nexus:

stage ('Publish') {
  nodejs(nodeJSInstallationName: 'Node LTS', configId: '123456ab-1234-abcd-1234-f123d45e6789') {
    sh 'npm publish'
  }
}

我在我的 Jenkins 上安装了一个名为“Node LTS”的 NodeJS 和一个带有此 configId 的 npmrc 配置文件。

现在我想将这个阶段导出到一个常规的 SharedLib 中。 根据 Declarative Pipeline documentationthis nodejs-plugin issue ,我可以这样写:

    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`

最佳答案

查看 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

关于node.js - 编写 Jenkins 管道共享库以发布到 Nexus NPM 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47989277/

相关文章:

jenkins - 如何在管道中使用通过 ssh 插件发布

jenkins - 如何中止声明性管道

javascript - 当我有更多后端 javascript 文件时,是否应该将 node_modules 放入单独的文件夹中?

node.js - remy inliner 命令行工具返回 path.existsSync 现在称为 `fs.existsSync`

node.js - 使用 Mongoose 模式验证密码/确认密码

linux - 在 Jenkins 上构建的差异?

node.js - mongoDB 中的原子方法使用 Node : find object, 创建(如果不存在)

tomcat - 如何使用 Jenkins 管道将 war 部署到tomcat?

Jenkins无需手动登录即可搭建监控墙

Jenkins如何创建管道手动步骤