一. nexus 搭建
docker run -d -uroot --name nexus3 --restart=always -p 8081:8081 -v /data/nexus-data/blobs:/nexus-data/blobs -v /etc/localtime:/etc/localtime sonatype/nexus3
注:提前创建/data/nexus-data 目录,检查端口是否被占用
2. 访问
192.168.110.112::8081
注: 第一次登陆会提示修改密码
image.png
3. 修改密码
进入容器: docker exec -it nexus3 sh
查看默认密码:cat /nexus-data/admin.password
web页面修改密码即可
4. 访问成功如图
二 . 配置nexus仓库
1. 使用admin 账户登录neuxs平台 单击Repositories
2. 创建nexus仓库
2. 仓库概念简单说明
npm(proxy): 可配置代理的仓库,当此仓库没有相应包时 会从配置的第三方仓库拉取 并缓存到本地proxy仓库
npm(hosted):开发自己的包推送到此仓库,需登录才能推送
npm(group): 可配置包含上面两种仓库,这样用户只需要配置npm(group) 这个地址即可 ,避免配置npm(proxy) 和npm(hosted) 两个地址
注:下面是创建后生成的地址
image.png
3. 创建并配置仓库
3.1 配置npm(proxy) 仓库
1. name:npm_proxy , nexus 会将 这个name当做仓库地址的一部分 如图2
2. 配置淘宝源为远程仓库地址 https://registry.npm.taobao.org 当proxy仓库没有包时 会去淘宝拉取并缓存本地
3.2 配置npm(hosted)仓库
1. 填写 name名字
2. 可选 --> Deployment Policy : 建议选择 Allow redploy 这个选项,因为实际项目中开发会经常推送同一个包上去,如果选择Disable redeploy 则在仓库有 xx 文件时
不会在允许你推送第二次,有报错通知如图2
3.3 配置npm(group)仓库
1. 将上面创建好的2个组加入到右边 即可
3.4 配置后如图
注: copy 地方可查看 仓库地址
四. 测试nexus 仓库
1. 在使用nexus前 仓库没有任何数据
2. 自定义项目构建 ,寻找自己的jenkins或其他项目进行构建
2.1 构建时指定nexus 镜像仓库
npm config set registry http://192.168.110.112:8081/repository/npm_all/ #配置使用nexus仓库代理
npm -loglevel info install # -loglevel info 能打印出拉取包的地址 用于测试构建是否使用nexus代理 npm run build:prod
3. 通过日志可以看出 ,node构建已经走了配置的nexus代理
4. 查看nexus仓库,查看是否缓存的拉取的响应的node包
注: 可以看出 nexus 已经将流水线构建需要的包 拉倒了本地并缓存
五: node 项目使用vue时 会安装依赖node-sass 而node-saas 有需要去github上下载依赖包, 当网络不稳定时,就会出现下载超时,甚至是失败的情况,最显著现象就是流水线构建极慢,开发抱怨颇深,我们可以建node-saa 类型的包也做个nexus代理
注: VUE工程使用了node-sass或其它命令工具,仅仅只对淘宝 NPM 镜像进行代理是不行的,我们还需要对淘宝开源镜像进行代理。
现象(node构建日志)
> node-sass@4.14.1 install /home/jenkins/agent/workspace/enn-boiler-tools/enn-boiler-tools-test-enn-gft-web/node_modules/node-sass
> node scripts/install.js
Downloading binary from https://github.com/sass/node-sass/releases/download/v4.14.1/linux-x64-64_binding.node
Cannot download "https://github.com/sass/node-sass/releases/download/v4.14.1/linux-x64-64_binding.node":
ESOCKETTIMEDOUT
Hint: If github.com is not accessible in your location
try setting a proxy via HTTP_PROXY, e.g.
export HTTP_PROXY=http://example.com:1234
or configure npm proxy via
解决办法:
方法1. 可直接配置淘宝代理 :npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass/
方法2. 使用nexus group代理,然后将group 远程仓库设置为淘宝,这样比直接设置淘宝代理更快
1. 配置nexus raw仓库
2. 填写远程代理地址: https://npm.taobao.org/mirrors/node-sass/
验证:
1. 未使用前仓库为空
2. 设置配置构建环境
npm config set registry http://192.168.110.112:8081/repository/npm_all
npm config set sass_binary_site http://192.168.110.112:8081/repository/node-saas/
npm -loglevel info install
npm run build:prod
3. 查看日志, 下载成功
看下nexus是否已经缓存
其他:
如何上传自定义的node的包
- 需满足两个条件 1. 准备好需上传的node包
2. nexus 创建上传用户并赋权
1. 准备node包文件 ,自定义node 包
[root@zabbix tmp]# mkdir genNodePackage
[root@zabbix tmp]# cd genNodePackage
[root@zabbix genNodePackage]# npm init
This utility will walk you through creating a package.json file.
It only covers the most common items, and tries to guess sensible defaults.
See `npm help json` for definitive documentation on these fields
and exactly what they do.
Use `npm install <pkg>` afterwards to install a package and
save it as a dependency in the package.json file.
Press ^C at any time to quit.
package name: (gennodepackage) kaishidongle
version: (1.0.0)
description:
entry point: (index.js)
test command:
git repository:
keywords:
author:
license: (ISC)
About to write to /tmp/genNodePackage/package.json:
{
"name": "kaishidongle",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Is this OK? (yes) yes
[root@zabbix genNodePackage]# cat package.json
{
"name": "kaishidongle",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
[root@zabbix genNodePackage]# touch index.js
[root@zabbix genNodePackage]# ls
index.js package.json
# 一个node包就制作好了 这里只测试上传和下载 ,忽略制作包的可用性
2. nexus创建用户并赋权
创建用户
检查用户:
3. 配置上传环境
3.1 使用新创建用户进行登录
[root@zabbix genNodePackage]# npm adduser --registry=http://192.168.110.112:8081/repository/npm_hosted/
Username: kaishidongle
Password:
Email: (this IS public) xx@163.com
Logged in as kaishidongle on http://192.168.110.112:8081/repository/npm_hosted/
3.2 推送node包
[root@zabbix genNodePackage]# pwd
/tmp/genNodePackage
[root@zabbix genNodePackage]# npm publish --registry=http://192.168.110.112:8081/repository/npm_hosted/
npm notice
npm notice 📦 kaishidongle@1.0.0
npm notice === Tarball Contents ===
npm notice 0 index.js
npm notice 208B package.json
npm notice === Tarball Details ===
npm notice name: kaishidongle
npm notice version: 1.0.0
npm notice package size: 267 B
npm notice unpacked size: 208 B
npm notice shasum: e72106d9efe1f4e1e4d64f3b86a51639ddd335a3
npm notice integrity: sha512-tDnn0vym6PH0R[...]j6Z6RhPXG3Aww==
npm notice total files: 2
npm notice
+ kaishidongle@1.0.0
3.3 检查结果 推送成功
3.4 测试下载已上传的包
[root@zabbix genNodePackage]# docker run --rm -it node bash # 使用docker hub的node镜像进行测试
root@7931c5ac918a:/# npm config set registry http://10.39.15.6:8081/repository/npm-group-test-by-lm #配置nexus代理
root@7931c5ac918a:/# npm install kaishidongle #装包
npm WARN saveError ENOENT: no such file or directory, open '/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/package.json'
npm WARN !invalid#1 No description
npm WARN !invalid#1 No repository field.
npm WARN !invalid#1 No README data
npm WARN !invalid#1 No license field.
+ kaishidongle@1.0.0
added 1 package in 0.409s
root@7931c5ac918a:/# ls
bin boot dev etc home lib lib64 media mnt node_modules opt package-lock.json proc root run sbin srv sys tmp usr var
root@7931c5ac918a:/# ls node_modules/ # 包拉取成功
kaishidongle
nexus 上的kaishdongle 这个包状态也已经改变
如何删除nexus上的包