编写 Jenkins Pipeline 共享库以发布到 Nexus NPM 存储库

Kar*_*538 5 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'
  }
}
Run Code Online (Sandbox Code Playgroud)

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

现在我想将这个阶段导出到一个常规的 SharedLib 中。根据声明性管道文档这个nodejs-plugin问题,我可以这样写:

    stage('Publish') {
        tools {
            nodejs 'Node LTS'
        }
        steps {
            sh 'npm publish'
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这不会设置当前在我的 npmrc 配置文件中的身份验证配置:

registry=http://my-nexus/repository/npm-private/
_auth="some=base=64=credential=="
always-auth=true
Run Code Online (Sandbox Code Playgroud)

有什么想法可以使用声明性语法检索此配置并防止出现此错误消息吗?

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`
Run Code Online (Sandbox Code Playgroud)

Kar*_*538 6

查看 npm 日志文件并阅读文档,我最终发现最好的解决方案是在 package.json 文件中指定以下发布配置:

{
  "name": "@my-company/my-project",
  ...
  "publishConfig": {
    "registry": "http://my-nexus/repository/npm-private/"
  },
  ...
}
Run Code Online (Sandbox Code Playgroud)

我留下.npmrc配置:

registry=http://my-nexus/repository/npm-private/
_auth="some=base=64=credential=="
always-auth=true
Run Code Online (Sandbox Code Playgroud)

注意always-auth就我而言,自动化脚本需要:https://docs.npmjs.com/misc/config