1. Nexus3介绍
nexus 作为一款优秀的仓库管理工具,不仅默认支持maven、docker、npm、yum、apt等多种仓库的配置。nexus3 最新的还新增了store隔离存储功能,通过UI创建不同的store为repo指定不同的存储空间,达到物理隔离。
帮助文档
目录结构说明
nexus 安装目录
├── LICENSE.txt
├── NOTICE.txt
├── bin 此目录包含nexus的启动脚本和与启动相关的配置文件,其中的nexus文件是nexus的启动文件。
├── deploy
├── etc 配置文件目录。
├── lib 依赖库目录。
├── public 公共资源目录。
├── system 此目录包含构成nexus的所有组件和插件。
sonatype-work 数据目录
├── nexus3
│ ├── blobs 没有使用绝对路径定义的所有基于文件系统的blob存储的父目录。
│ ├── cache 此目录包含当前缓存的karaf软件包的信息。
│ ├── db 此目录包含OrientDB数据库,是repository manager元数据的主要存储。
│ ├── elasticsearch 此目录包含elasticsearch的当前配置状态。
│ ├── etc 此目录包含了repository manager的主要运行时的配置。在配置运行时环境中这些文件被进一步补充说明了。
│ ├── generated-bundles
│ ├── instances
│ ├── karaf.pid
│ ├── health-check
│ ├── keystores 用于识别repository manager自动生成的秘钥。
│ ├── lock
│ ├── log 日志文件存放的目录。
│ ├── orient
│ ├── port
│ ├── restore-from-backup
└── └── tmp 临时存储目录。
2. Sonatype Nexus Repository Manager
在右上角点击“Sign In”的登录按钮,输入admin/admin123,登录成功
2.1. Browse Server Content
2.1.1 Browse Server Content -- Search
类似于Maven仓库上的搜索功能,就是从私服上查找包,支持模糊搜索的
2.1.2 Browse Server Content -- Browse
2.1.3 Browse Server Content -- Upload
顾名思义就是上传jar包到私服中,可以选择其中一个hosted仓库。
注意:通过页面直接上传的方式只是上传了jar包,若这个jar通过Maven依赖了其他jar,那其他项目在下载这个jar时无法取得它的依赖。所以,除非这个jar没有任何依赖,否则还是推荐通过命令行或者IDE的方式上传jar包,这样才会把pom一并上传。
2.2 Repository
2.2.1 Repositories
仓库分为三种:Proxy、hosted、group
【Proxy】
代理仓库,当PC访问中央库的时候,先通过Proxy下载到Nexus仓库,然后再从Nexus仓库下载到PC本地。
这样的优势只要其中一个人从中央库下来了,以后大家都是从Nexus私服上进行下来,私服一般部署在内网,这样大大节约的宽带。
创建Proxy的具体步骤
- 点击左上角的“Create Repositories”按钮
- 选择要创建的类型,可以选择maven2(hosted)。
- 填写详细信息(Nexus默认远程仓库响应慢,而且经常连不上。可以添加阿里云代理仓库)
Name:aliyun
Remote Storage:http://maven.aliyun.com/nexus/content/groups/public
Blob Store:选择代理下载包的存放路径
- 选中仓库组 Public Repositories,把 Aliyun Repository 从 Availiable Repositories 中拖到Ordered Group Repositories中,放在Central上边。保存
【Hosted】
Hosted是宿主机的意思,用于将第三方的Jar或者我们自己的jar放到私服上。
Hosted有三种方式,Releases、SNAPSHOT、Mixed
Releases: 一般是已经发布的Jar包
Snapshot: 未发布的版本
Mixed:混合的
Hosted的创建和Proxy类似,类型需选择maven2(hosted)。
注意:Deployment Pollcy,我们需要把策略改成“Allow redeploy”,以允许重复发布覆盖同版本的jar包。
【Group】
能把多个仓库合成一个仓库来使用,把上几步创建的代理仓库和宿主仓库都加入到“maven-public”仓库组中:
2.2.2 Blob Stores
文件存储的地方,创建一个目录的话,对应文件系统的一个目录。
如果众多项目放在一个blob中,将会导致其非常巨大,所以对于不同的repository建议创建自己的blob。
2.2.3 Content Selectors
2.2.4 Cleanup Policies
2.2.5 Routing Rules
2.3 Security
Nexus是基于权限做访问控制的,服务器的每一个资源都有对应的权限来控制,因此用户执行特定的操作时就必须拥有必要的权限。管理员必须以角色的方式将权限赋予Nexus用户。用户可以被赋予一个或者多个角色,角色可以包含一个或多个权限,角色还可以包含一个或者多个其他角色
包含用户、角色、权限的配置。
2.3.1 Privileges--Manage privileges
2.3.2 Roles--Manage roles
2.3.3 Users--Manage users
2.3.4 Anonymous--Browse server contents without authenticating
2.3.5 LDAP--Manage LDAP server configuration
2.3.6 Realms--Manage the active security realms and their order
2.3.7 SSL Certificates--Manage trusted SSL certificates for use with the Nexus truststore
2.4 Support
包含日志及数据分析。
2.4.1 Logging
2.4.2 Metrics
2.4.3 Status---System status checks
2.4.4 Support ZIP
2.4.5 System Information
2.5 System
包含API(Nexus这个API文档貌似是用swagger做的)、邮件服务器,设置调度任务等。
https://help.sonatype.com/repomanager3/rest-and-integration-api
3. 将本地库批量导入到Nexus3.x上(Maven私服)
问题描述
(1)由于公司内网的 Nexus 私服仓库不能联网,本地仓库已经有很多的 maven 的 jar 包了,便想将其从本地仓库导入到 Nexus 私服中。
(2)Nexus2.x 批量导入本地库是十分容易的,只需将库文件夹复制到对应 nexus 库下面,去网页刷新一下索引就OK了。在 Nexus3.x 中,应该怎么做
a). 首先访问 Nexus 管理页面并登录,点击“Create repository”按钮新建一个类型为maven2(hosted)的仓库。
b). 在服务器 /data/nexus 目录下,新建一个文件夹 import,放入我们的本地库文件夹:
c). 在 repository 文件夹下执行如下命令创建一个 shell 脚本:
vi mavenimport.sh
#!/bin/bash
# copy and run this script to the root of the repository directory containing files
# this script attempts to exclude uploading itself explicitly so the script name is important
# Get command line params
while getopts ":r:u:p:" opt; do
case $opt in
r) REPO_URL="$OPTARG"
;;
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
find . -type f -not -path './mavenimport.sh*' -not -path '*/.*' -not -path '*/^archetype-catalog.xml*' -not -path '*/^maven-metadata-local*.xml' -not -path '*/^maven-metadata-deployment*.xml' | sed "s|^./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} ${REPO_URL}/{} ;
d). 保存退出后执行如下命令
#赋予其执行权限:
$ chmod +x mavenimport.sh
#jar 包都导入到指定仓库中
$ ./mavenimport.sh -u deployment -p deployment123 -r http://10.15.22.172:8081/nexus/repository/maven-local/
#注意:命令中 Nexus 用户名、用户密码、仓库地址根据实际情况进行修改。
e). 访问 Nexus 控制台页面,可以发现确实都上传成功了