Maven篇----05 Nexus3私服管理

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

类似于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的具体步骤

  1. 点击左上角的“Create Repositories”按钮
  2. 选择要创建的类型,可以选择maven2(hosted)。
  3. 填写详细信息(Nexus默认远程仓库响应慢,而且经常连不上。可以添加阿里云代理仓库)
    Name:aliyun
    Remote Storage:http://maven.aliyun.com/nexus/content/groups/public
    Blob Store:选择代理下载包的存放路径
  4. 选中仓库组 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 控制台页面,可以发现确实都上传成功了

posted @ 2020-06-23 22:15  雨 燕  阅读(3261)  评论(0编辑  收藏  举报