Jenkins 实现 Nexus npm Library 版本发布时遇到的问题
问题说明
使用 Nexus 来开发 前端Library 镜像仓库时,在 执行
npm publish
提交前,需要有npm adduser
操作来,添加对镜像仓库的 user token, 这个npm adduser
会触发一个交互界面,来输入username password email 等信息,这在手动发布版本时是没有问题的,但是如果要在 Jenkins Job 中实现自动化的发版,那么npm adduser
触发的交互界面就会对构建有影响,以下是解决方案。
解决思路
- Jenkins Job 执行过程中在项目根目录下,创建新的 .npmrc 文件,用于配置当前项目的 npm 配置
- 使用
_auth
配置来代替在交互界面中输入username:password
需要创建的 .npmrc 配置
email=${LIBRARY_EMAIL} # Nexus 需要填写,一个普通的邮件地址即可
always-auth=true # 强制npm在访问注册表时始终需要身份验证,即使对于GET请求也是如此
_auth=${libraryAuth} # _auth 是将 username:password 进行base64转码后的结构,也是身份认证的关键
_auth 生成
_auth 是将 username:password 进行base64转码后的结构吗,可通过如下命令生成
echo -n 'username:password' | openssl base64
Jenkins 中的实现
stage("create .npmrc") {
steps {
dir("ui-library") {
script {
def libraryAuth = sh(returnStdout: true, script: "echo -n 'username:password' | openssl base64").trim()
echo "Get _auth = ${libraryAuth}"
def npmrc = sh(returnStdout: true, script: "echo 'email=xxx@163.com\nalways-auth=true\n_auth=${libraryAuth}\n' > .npmrc")
echo "${npmrc}"
}
}
}
}
然后在下一个 阶段中执行
npm publish
即可