Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南

目录

    • 环境说明
      • 简单概括下
    • Setp1 nexus3.18.1-01-unix 下载
    • Setp2 解压
    • Step3 环境变量配置
    • Setp4 启动
    • Step5 地址和权限配置
      • 访问私服地址
      • admin登陆
      • 权限设置
      • 新增用户以及相关权限演示
          • developer(拥有3rd-party 和 snapshot类型仓库包内容修改的完整权限)
          • deployper(拥有所有类型仓库包内容修改的完整权限)
    • Step5 批量上传本地jar到私服
    • Step6 maven上传本地jar到私服
      • 配置setting.xml
      • cmd/shell 命令行 mvn deploy
      • 开发工具mvn deploy
    • 设置开启启动
    • 参考资料

因为项目需要,需要给开发团队在内网环境下搭建私服,同时完成相关工作笔记本本地maven仓库jar的快速迁移到私服。花了点时间查了网上的相关资料,基本上都能找到相应的内容,本人只是将搭建过程中用到的相关资料做了梳理,方便下次使用。

环境说明

官方系统要求文档

简单概括下

  1. java 版本 要求jdk 1.8+,jvm按需配置,官方系统要求文档里有指导说明
  2. 磁盘空间适当就行,按需配置
  3. 浏览器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 工作目录,包含缓存信息,日志,上传到私服的相关包的信息

Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第1张图片

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账号来跑服务,这种情况下会给出一个提醒
[外链图片转存失败(img-M4fvqar3-1567150210496)(./1567075962913.png)]
nexus run

  • 当你不确定环境是否ok时,建议先用这个,会在界面直接打印程序日志。类似java -jar 启动服务,退出当前窗口以后进程被杀死。

nexus start/stop/restart/force-reload

  • 正常后台启动服务**/关闭/重启/** force-reload和restart实际执行的是一样的操作

日志路径:${安装路径}/sonatype-work/nexus3/log/
Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第2张图片

Step5 地址和权限配置

访问私服地址

访问地址: http://ip:8081/ 8081是默认程序端口
默认情况下,匿名账号(不登陆)可以查看私服相关仓库的地址信息,可以下载到仓库的jar

admin登陆

从服务器找到admin密码登录。
Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第3张图片
初次登录以后让你选择是否做默认事件:

  • 让你修改admin密码
  • 设置是否允许匿名账号(不登陆)访问私服仓库,下载私服的jar

默认建好的仓库
Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第4张图片

  • 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

Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第5张图片
Version policy 如果选择了Release 或者 Snapshot 就会有上述限制,按需选择

  • 将3rd-party 仓库加到public组

Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第6张图片

权限设置

这块权限设计依照经典的权限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类型仓库库的上传权限)
    Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第7张图片
  • nx-deployment 运维权限(匿名权限+全类型仓库的上传权限)
    Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第8张图片

新增用户以及相关权限演示

  • 新增用户操作界面
    Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第9张图片

developer(拥有3rd-party 和 snapshot类型仓库包内容修改的完整权限)

有页面上传的权限,但是没有针对releases仓库的修改权限,这样也无法上传包Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第10张图片
3rd-party 包上传Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第11张图片
3rd-party 包删除Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第12张图片


deployper(拥有所有类型仓库包内容修改的完整权限)

releases仓库包删除Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第13张图片
releases仓库包上传Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第14张图片

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 "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//{} ;

Step6 maven上传本地jar到私服

使用maven 也可以实现批量上传包到私服,只是目前需要编写脚本来完成参数的拼装,没有上面的方式来的方便。

配置setting.xml

setting.xml中 server id、repository id 和maven 仓库中的名称要一致
Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第15张图片






<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>

cmd/shell 命令行 mvn deploy

注意需要配置好环境变量(注意不要再本地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

Linux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第16张图片

开发工具mvn deploy

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>     

idea中deployLinux Nexus Repository Manager OSS 3.18.1-01 搭建指南_第17张图片

设置开启启动

官网介绍设置开机启动方案
本人做法:在/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

你可能感兴趣的:(#,nexus,maven私服,JAVA)