因为项目需要,需要给开发团队在内网环境下搭建私服,同时完成相关工作笔记本本地maven仓库jar的快速迁移到私服。花了点时间查了网上的相关资料,基本上都能找到相应的内容,本人只是将搭建过程中用到的相关资料做了梳理,方便下次使用。
官方系统要求文档
- java 版本 要求jdk 1.8+,jvm按需配置,官方系统要求文档里有指导说明
- 磁盘空间适当就行,按需配置
- 浏览器IE11+,其他火狐、谷歌、Safari、Edge用最新版即可
官网地址 想要下载更新的版本的可以自行去找最新版本
nexus3.18.1-01-unix 官网下载链接
为了避免下载不了,提供百度网盘下载地址:https://pan.baidu.com/s/1ibe4qkzAa2B-wbMApR0i0w 提取码:c4uq
tar -xvf nexus-3.18.1-01-unix.tar.gz
./nexus-3.18.1-01 程序home路径
./sonatype-work 工作目录,包含缓存信息,日志,上传到私服的相关包的信息
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
使用root账号来跑服务,这种情况下会给出一个提醒
nexus run
- 当你不确定环境是否ok时,建议先用这个,会在界面直接打印程序日志。类似java -jar 启动服务,退出当前窗口以后进程被杀死。
nexus start/stop/restart/force-reload
- 正常后台启动服务**/关闭/重启/** force-reload和restart实际执行的是一样的操作
访问地址: http://ip:8081/ 8081是默认程序端口
默认情况下,匿名账号(不登陆)可以查看私服相关仓库的地址信息,可以下载到仓库的jar
从服务器找到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
- 将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操作的仓库,但是可以通过针对仓库包的相关权限来限制
本人按需增加了两个权限
有页面上传的权限,但是没有针对releases仓库的修改权限,这样也无法上传包
3rd-party 包上传
3rd-party 包删除
借助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 "jar$|pom$" |grep -viE "snapshot" |grep -Ev "yuntai|hip" | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} http://ip:8081/repository/3rd-party//{} ;
#将公司相关的jar导入maven-snaphosts仓库
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 "jar$|pom$" |grep -iE "snapshot" |grep -E "yuntai|hip" | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} http://ip:8081/repository/maven-snapshots//{} ;
#将公司相关的jar导入maven-releases仓库(不允许带SNAPSHOT后缀)
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 "jar$|pom$" |grep -viE "snapshot" |grep -E "yuntai|hip" | sed "s|^\./||" | xargs -I '{}' curl -u "$USERNAME:$PASSWORD" -X PUT -v -T {} http://ip:8081/repository/maven-releases//{} ;
使用maven 也可以实现批量上传包到私服,只是目前需要编写脚本来完成参数的拼装,没有上面的方式来的方便。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>D:\AboutWork\maven\repositorylocalRepository>
<interactiveMode>trueinteractiveMode>
<usePluginRegistry>falseusePluginRegistry>
<offline>falseoffline>
<pluginGroups>
<pluginGroup>org.mortbay.jettypluginGroup>
<pluginGroup>org.codehaus.cargopluginGroup>
<pluginGroup>com.hundsun.scm.maven.pluginspluginGroup>
<pluginGroup>org.apache.maven.pluginspluginGroup>
<pluginGroup>org.codehaus.mojopluginGroup>
pluginGroups>
<proxies>
proxies>
<servers>
<server>
<id>maven-snapshotsid>
<username>usernameusername>
<password>passwordpassword>
server>
<server>
<id>maven-releasesid>
<username>usernameusername>
<password>passwordpassword>
server>
servers>
<mirrors>
<mirror>
<id>publicid>
<name> Maven Hundusn Yuntai Mirror(zjrc)name>
<mirrorOf>*mirrorOf>
<url>http://nexusIp:8081/repository/maven-public/url>
mirror>
mirrors>
<profiles>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
<profile>
<id>devid>
<repositories>
<repository>
<id>maven-releasesid>
<url>http://nexusIp:8081/repository/maven-releases/url>
<releases>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
releases>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
<repository>
<id>maven-snapshotsid>
<url>http://nexusIp:8081/repository/maven-snapshots/url>
<releases>
<enabled>falseenabled>
releases>
<snapshots>
<enabled>trueenabled>
<updatePolicy>alwaysupdatePolicy>
snapshots>
repository>
repositories>
profile>
profiles>
<activeProfiles>
<activeProfile>devactiveProfile>
activeProfiles>
settings>
注意需要配置好环境变量(注意不要再本地maven仓库下目录下执行)
PS:当前本人暂时只能使用admin的账号来实现这部分能,其他非admin账号的暂时无权限做该项任务
mvn deploy:deploy-file -DgroupId=com.hip -DartifactId=mfc-core -Dversion=1.0 -Dpackaging=jar -Dfile=./mfc-core-1.0.jar -Durl=http://ip:8081/repository/maven-releases/ -DrepositoryId=maven-releases --settings C:\Users\yttiany\Desktop\settings.xml
pom.xml 中增加仓库地址配置,同样需要注意id
<distributionManagement>
<snapshotRepository>
<id>maven-snapshotsid>
<url>http://ip:8081/repository/maven-snapshots/url>
snapshotRepository>
<repository>
<id>maven-releasesid>
<url>http://ip:8081/repository/maven-releases/url>
repository>
distributionManagement>
官网介绍设置开机启动方案
本人做法:在/etc/rc.local 文件最底下加入行 nexus start
[1] 批量导入本地仓库的jar到私服(参考脚本)https://blog.csdn.net/u014468095/article/details/87261817
[2] nexus 3.x 类似2.x默认新建的deployment权限描述 https://blog.csdn.net/diaoge_v5/article/details/84584382