目录
因为项目需要,需要给开发团队在内网环境下搭建私服,同时完成相关工作笔记本本地maven仓库jar的快速迁移到私服。花了点时间查了网上的相关资料,基本上都能找到相应的内容,本人只是将搭建过程中用到的相关资料做了梳理,方便下次使用。
环境说明
简单概括下
- java 版本 要求jdk 1.8+,jvm按需配置,官方系统要求文档里有指导说明
- 磁盘空间适当就行,按需配置
- 浏览器IE11+,其他火狐、谷歌、Safari、Edge用最新版即可
Setp1 nexus3.18.1-01-unix 下载
官网地址 想要下载更新的版本的可以自行去找最新版本
nexus3.18.1-01-unix 官网下载链接
为了避免下载不了,提供百度网盘下载地址:https://pan.baidu.com/s/1ibe4qkzAa2B-wbMApR0i0w 提取码:c4uq
Setp2 解压
tar -xvf nexus-3.18.1-01-unix.tar.gz
./nexus-3.18.1-01 程序home路径
./sonatype-work 工作目录,包含缓存信息,日志,上传到私服的相关包的信息
Step3 环境变量配置
nexus的环境变量可以不配置,java的参数必须配
vim /etc/profile
#配置JAVA_HOME和NEXUS_HOME
export JAVA_HOME=/usr/java/jdk1.8.0_181
export NEXUS_HOME=/home/nexus/nexus-3.18.1-01
export PATH=$JAVA_HOME/bin/:$PATH:$NEXUS_HOME/bin;
#完成以后使更改后的文件立即生效
source /etc/profile
#检验配置是否成功
nexus
Setp4 启动
使用root账号来跑服务,这种情况下会给出一个提醒
nexus run
- 当你不确定环境是否ok时,建议先用这个,会在界面直接打印程序日志。类似java -jar 启动服务,退出当前窗口以后进程被杀死。
nexus start/stop/restart/force-reload
- 正常后台启动服务**/关闭/重启/** force-reload和restart实际执行的是一样的操作
日志路径:${安装路径}/sonatype-work/nexus3/log/
Step5 地址和权限配置
访问私服地址
访问地址: http://ip:8081/ 8081是默认程序端口
默认情况下,匿名账号(不登陆)可以查看私服相关仓库的地址信息,可以下载到仓库的jar
admin登陆
从服务器找到admin密码登录。
初次登录以后让你选择是否做默认事件:
- 让你修改admin密码
- 设置是否允许匿名账号(不登陆)访问私服仓库,下载私服的jar
默认建好的仓库
- maven-releases (Version policy=Release)默认只允许上传不带SNAPSHOT版本尾缀的包,默认部署策略是Disable redeploy 不允许重复上传相同版本号信息的jar,避免包版本更新以后使用方无法获取到最新的包。
- maven-snapshots (Version policy=Snapshot)只允许上传带SNAPSHOT版本尾缀的包,默认部署策略是Allow redeploy,允许重复上传相同版本号信息的jar,每次上传的时候会在jar的版本号上面增加时间后缀信息。
- maven-central 中央仓库的拷贝,如果环境可以访问中央仓库,则可以获取到相关的包,否则没用
- maven-public 仓库组,不是实际个一个仓库地址,只是将现有的组合到一次,可以通过它看到所属组内全部仓库的jar信息
- 针对当前的情况,需要自建第三方的仓库3rd-party
Version policy 如果选择了Release 或者 Snapshot 就会有上述限制,按需选择
- 将3rd-party 仓库加到public组
权限设置
这块权限设计依照经典的权限Role-based Access Control,基于角色的权限控制模型。
- Privileges 权限信息
目前分为页面编辑部分默认已经建好,而且不允许编辑;仓库部分,默认仓库的相关权限也已经建好,并且不允许编辑,可以针对新建的仓库进行权限的编辑(nexus2.x版本新建仓库代码默认生成view查看权限,其他需要新建)
- nx-repository-admin 开头的是针对仓库本身的相关权限
- nx-repository-view 开头的是针对仓库里jar的相关权限
- Roles 角色信息
角色拥有相应的具体权限,当前服务默认生产两种权限
- nx-admin 超管权限
- nx-anonymous 匿名用户权限
- User 用户,选择分配相应的角色,拥有角色所属的权限
nexus对于上传Upload权限(Privilege name=nx-component-upload)的控制比较特殊,Web网页上只允许针对Version policy!=Snapshot类型的仓库提供操作界面。而且目前该权限无法针对仓库来控制,只要你有这个权限,就可以看到全部允许做Upload操作的仓库,但是可以通过针对仓库包的相关权限来限制
本人按需增加了两个权限
- nx-develop 开发者( 匿名权限+Snapshots+3rd party类型仓库库的上传权限)
- nx-deployment 运维权限(匿名权限+全类型仓库的上传权限)
新增用户以及相关权限演示
- 新增用户操作界面
developer(拥有3rd-party 和 snapshot类型仓库包内容修改的完整权限)
有页面上传的权限,但是没有针对releases仓库的修改权限,这样也无法上传包
3rd-party 包上传
3rd-party 包删除
deployper(拥有所有类型仓库包内容修改的完整权限)
releases仓库包删除
releases仓库包上传
Step5 批量上传本地jar到私服
借助shell脚本来做相关实现,整体思路就是利用nexus的api结合管道将find 指令查找文件(含路径)列表信息作为参数实现快速完成功能
由于脚本中find 后面使用的是 . 路径,需要进入到jar存放的目录以后去执行脚本,此处的路径为本地仓库地址(目前这部分API没有在nexus的管理后台找到,这块究竟需要什么权限也不明确,目前的developer和deployper都有权限可以做这个事 )
执行脚本
#!/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 ":u:p:" opt; do
case $opt in
u) USERNAME="$OPTARG"
;;
p) PASSWORD="$OPTARG"
;;
esac
done
#将第三方的包导入3rd-party仓库
find . -type f -not -path './maven-auto-put-to-nexus\.sh*' -not -path '*/\.*' -not -path '*/\^archetype\-catalog\.xml*' -not -path '*/\^maven\-metadata\-local*\.xml' -not -path '*/\^maven\-metadata\-deployment*\.xml' |grep -E