1. 一行命令登录npm仓库:
(1). 背景:
①. 在Jenkins、云效等CI环境中使用Npm访问认证的仓库,需要交互命令:
a. npm login交互式的输入用户名、密码、邮箱的方式
b. 不适合CI环境
②. 方案:
a. 使用延迟输入、管道重定向、expect命令等方式,如果安装软件或仓库响应慢的情况下,也容易登录失败
b. shell方案
c. 使用authToken方式直接登录指定npm仓库:
(1). authToken是npm用户登陆仓库时,由npm仓库生成返回给客户端,记录到客户端的~/.npmrc中
(2). 获取authToken:
// 在本地设置npm仓库:
npm login --registry=https://packages.aliyun.com/619c46efcc6e31f53d1804bf/npm/npm-registry/
(3). 登陆后,打开~/.npmrc:
//packages.aliyun.com/619c46efcc6e31f53d1804bf/npm/npm-registry/:_authToken=xxxx-xxxx
仓库认证地址前协议被去除,即以//开头
(4). 修改Jenkins修改脚本中登录npm仓库命令:
stage('前端构建发布') {
steps {
sh label: '设置npm仓库', script: 'npm set registry ${NVWA_NPM_REGISTRY}'
sh label: '登陆仓库', script: 'npm config set //packages.aliyun.com/619c46efcc6e31f53d1804bf/npm/:_authToken ${NVWA_AUTH_TOKEN}'
sh label: '安装cli', script: 'npm install -g cx-cli@latest'
sh label: '构建上传npm仓库', script: '/bin/bash ${SHELL_PATH}/public-web.sh'
}
}
脚本中环境变量处定义:
${NVWA_NPM_REGISTRY}
(5). 云效实战:
npm config set //packages.aliyun.com/619c46efcc6e31f53d1804bf/npm/npm-registry/:_authToken xxxx-xxxx
npm install -g cx-cli@latest
yarn install
yarn build
其它token失败的方案:
sudo npm install -g cx-cli --registry=https://packages.aliyun.com/619c46efcc6e31f53d1804bf/npm/npm-registry/cx-cli/:_authToken=xxxx-xxxx
报错:
invalid json response body at https://packages.aliyun.com/619c46efcc6e31f53d1804bf/npm/npm-registry/cx-cli/:_authToken=xxxx-xxxx/cx-cli reason: Unexpected token < in JSON at position 2