詹金斯 2 NPM_TOKEN 凭证

Ido*_*Ran 5 npm jenkins jenkins-pipeline jenkins-2

我正在尝试运行 Jenkins 2 管道(Jenkinsfile),它将用于npm publish将包发布到本地 NPM 存储库。
为了做到这一点,我尝试在 Jenkinsfile 中使用以下阶段:

stage('TEST npm whoami') {
    withEnv(["PATH+NPM=${tool name: 'node-6', type: 'jenkins.plugins.nodejs.tools.NodeJSInstallation'}/bin"]) {
    withCredentials([[$class: 'StringBinding', credentialsId: 'npm-token', variable: 'NPM_TOKEN']]) {
        sh """
           npm whoami
           """
    }
    }
}
Run Code Online (Sandbox Code Playgroud)

目前我只在运行npm whoami,一旦可行,我将用npm publish.

这是我得到的输出:

+ npm whoami
npm ERR! Linux 4.7.5-1.el7.elrepo.x86_64
npm ERR! argv "/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node-6/bin/node" "/var/lib/jenkins/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/node-6/bin/npm" "whoami"
npm ERR! node v6.5.0
npm ERR! npm  v3.10.3
npm ERR! code ENEEDAUTH

npm ERR! need auth this command requires you to be logged in.
npm ERR! need auth You need to authorize this machine using `npm adduser`
Run Code Online (Sandbox Code Playgroud)

Ger*_*yan 7

从这个 GitHub 问题来看,似乎NPM_TOKEN不是 npm 本身识别的东西,而是 heroku (也许还有其他平台)解释的自定义环境变量。

根据该问题中的一些讨论,我所做的是.npmrc根据我的凭据中的令牌环境变量在作业执行时创建一个项目级别,然后在继续之前再次删除该文件。例如:

stage('TEST npm whoami') {
    withCredentials([string(
                credentialsId: 'npm-token',
                variable: 'NPM_TOKEN')]) {
        sh "echo //npm.skunkhenry.com/:_authToken=${env.NPM_TOKEN} > .npmrc"
        sh 'npm whoami'
        sh 'rm .npmrc'
    }
}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!