目录Nexus简介一、安装nexus1.方式一:使用压缩包安装nexus1)下载安装包2)修改配置3)启动nexus4)修改密码4)将nexus添加为service
目录
Nexus简介
一、安装nexus
1. 方式一: 使用压缩包安装nexus
1) 下载安装包
2) 修改配置
3) 启动nexus
4) 修改密码
4) 将nexus添加为service
2. 方式二: 使用Kubernetes 部署nexus
二、使用Nexus创建仓库
1、创建一个代理仓库
2、查看私服连接
3、配置pom.xml
4、配置maven的settings.xml
5、将本地项目发布到私服。
Nexus简介 Nexus是一款开源的仓库管理软件,我们可以借助nexus搭建一个私有的依赖(jar)仓库, 并且我们可以手动将jar 传到nexus上, 由nexus帮你生成maven坐标,管理方便。
一、安装nexus 本文介绍2种方式安装nexus, 一种采用压缩包的方式直接执行.sh文件启动, 另一种方式采用kubernets部署nexus。
1. 方式一: 使用压缩包安装nexus 1) 下载安装包 下载 nexus安装包, 我用的是3.19.1版本:
丢到centos服务器里后,使用命令解压
tar -zxvf nexus-3.19.1-01-unix.tar.gz
另贴上我的网盘连接,需要自取。
链接:https://pan.baidu.com/s/1bQO6dPn3LYPHO2xzY7XbOQ 提取码:dc85
解压到 /usr/local路径下:
2) 修改配置 进入到nexs-3.19.1-01目录,修改~/etc/nexus-default.properties, 可指定启动的端口:
配置好后,进入到bin目录下启动nexus
cd /usr/local/nexus-3.19.1-01/bin/
3) 启动nexus 执行命令
./nexus start
访问: 192.168.232.129:8081, 出现如下画面说明安装成功:
4) 修改密码 登录用户: admin, 登录默认密码存放在/usr/local/sonatype-work/nexus3/admin.password 路径,登录成功后,需要提醒你修改密码:
修改成功后,会进入到首页:
同样也可以执行 ./nexus stop 命令停止 nexus server。
4) 将nexus添加为service 安装成功后,接着可以设置开机自启 nexus, 在路径/etc/rc.d/init.d添加文件nexusd, 直接使用如下命令:
vim /etc/rc.d/init.d/nexusd
编写shell脚本配置如下,
注: 开头的chkconfig, description都要有,要不然会出现不支持chk的报错!
#!/bin/bash #chkconfig:345 61 61 #description:nexus . /etc/rc.d/init.d/functions . /etc/sysconfig/network [ "$NETWORKING" = "no" ] && exit 0 nexus=/usr/local/nexus-3.19.1-01 startup=/usr/local/nexus-3.19.1-01/bin/nexus shutdown=/usr/local/nexus-3.19.1-01/bin/nexus start(){ echo -n $"Starting nexus service:" sh $startup start echo $? } stop(){ echo -n $"Stoping nexus service:" sh $shutdown stop echo $? } restart(){ stop start } status(){ ps -ef|grep nexus } if "$1" in (start|stop|restart|status) then echo $1 elseecho "not support operation!" fi
保存退出后,加载并启用nexusd, 由chkconfig去加载
chkconfig -add nexusd chkconfig nexusd on
如果修改nexusd文件,需要重新刷新配置,执行如下命令即可:
systemctl daemon-reload
启动nexus:
systemctl start nexusd
停止nexus:
systemctl stop nexusd
还可以重启:
systemctl restart nexusd
查看nexus的服务状态:
启动成功! 访问 http://192.168.232.129:8081 ,如果能出现nexus首页,表明nexus启动成功!
这样配置完后,重新启动机器,nexus仓库可以自启。
2. 方式二: 使用Kubernetes 部署nexus 编写nexus-persisit.yaml文件放在centos 系统指定路径: /root/kubernetes/config/nexus下
apiVersion: v1 kind: PersistentVolume metadata:name: nexus-data spec:capacity:storage: 3GivolumeMode: FilesystemaccessModes:- ReadWriteOncepersistentVolumeReclaimPolicy: RetainstorageClassName: nexus-nfscinder:volumeID: a198bce4-ba0f-7e13-8f0c-55e3126-nexus # 改路径为映射到本机的 /var/lib/kubelet/plugins/kubernetes.io/cinder/mountsfsType: ext4 --- apiVersion: v1 kind: PersistentVolumeClaim metadata:name: nexus-data-pvc spec:accessModes:- ReadWriteOncevolumeMode: Filesystemresources:requests:storage: 3GistorageClassName: nexus-nfs --- apiVersion: apps/v1 kind: Deployment metadata:name: nexus-deployment spec:replicas: 1selector:matchLabels:app: nexustemplate:metadata:labels:app: nexusspec:containers:- name: nexusimage: sonatype/nexus3imagePullPolicy: IfNotPresentports:- containerPort: 8081- containerPort: 8082- containerPort: 8083volumeMounts:- mountPath: /nexus-dataname: nexus-datavolumes:- name: nexus-datapersistentVolumeClaim:claimName: nexus-data-pvc --- apiVersion: v1 kind: Service metadata:name: nexus-svc spec:selector:app: nexustype: NodePortports:- name: webprotocol: TCPport: 8081targetPort: 8081nodePort: 30081- name: dockerprotocol: TCPport: 8082targetPort: 8082nodePort: 30082- name: mavenprotocol: TCPport: 8083targetPort: 8083nodePort: 30083
执行命令 kubectl apply -f nexus-persist.yaml, 执行成功后,查看pod。
查看service:
访问: http://192.168.31.129:30081/, 能进入首页表示搭建成功。
注意: 挂载数据时,kubernetes为会pv提供一个存储路径volumeID, 然后会在
/var/lib/kubelet/plugins/kubernetes.io/cinder/mounts 路径下去寻找该volumeID, 如果不存在那么需要手动创建并授权给目录读写权限。
如果没有cinder指定的目录,那么会出现mount failed的报错问题。
二、使用Nexus创建仓库 进入到首页后,我们可以在Repositories下看到4个主要的默认仓库: maven-central、maven-public、maven-releases、maven-snapshots。
maven-central:核心中央仓库,是nexus的最重要的仓库。 maven-public:公共仓库,所有仓库。 maven-releases:存放jar的release仓库。 maven-snapshots:保存快照的仓库。 平时我们用的比较多阿里云镜像,如果我们本地没有一些jar, 也不想手动一个一个的把镜像上传到nexus仓库,那我们可以先把阿里云仓库作为一个代理仓库,就是说先从阿里云的仓库中将需要的镜像pull 到nexus上,然后本地仓库根据需要再向nexus拉取。
1、创建一个代理仓库 点击create repositories---> maven2(proxy)
阿里云仓库地址: https://maven.aliyun.com/repository/public
可以添加用户名和密码进行认证,根据需要设置:
最关键的一步: 将刚创建的 proxy仓库加入到 maven-public仓库中:
2、查看私服连接 上面的操作是为了后面的使用做准备,我们可以将私服的地址配置到自己的project里了, 下面是我们的仓库的镜像地址:
http://192.168.232.129:8081/repository/maven-public/
接着我们只需要将该地址配置到maven里就可以访问了。
3、配置pom.xml 将url配置到pom里,父标签为Project标签
nexus http://192.168.232.129:8081/repository/maven-public/
插件仓库的配置可暂时使用阿里云:
central https://maven.aliyun.com/repository/public
4、配置maven的settings.xml 在settings.xml添加mirror:
F:/local-repo
nexus admin nexus847652.
Snapshots admin nexus847652.
Releases admin nexus847652.
dev nexus http://192.168.31.129:30081/repository/maven-public/ true true
central public plugin https://maven.aliyun.com/nexus/content/groups/public/ default true false dev
1. 如果在idea里的终端里执行的mvn命令,那么idea会默认读取到用户文件夹里.m2/里面的settings.xml。
2. 如果在coonfigurations里面配置的mvn命令,那么会适应自己maven工具所在的config目录里的settings.xml。
进入项目,刷新maven依赖,刷新页面,在终端执行mvn clean isntall 会发现已经开始下载依赖了:
下载完成后,项目中会出现jar, 如上图,我们也可以从nexus里的Browse面板里查看依赖占内存,jar的路径等。
另外在更新maven依赖的时候可以到nexus仓库中看到已经缓存到里面的jar包:
至此nexus 私服搭建流程结束。
5、将本地项目发布到私服。 在项目的pom.xml文件里project标签下添加distributionManagement属性,设置好仓库后,执行mvn clean package deploy 命令。
pom.xml 文件如下,需要添加maven-deploy-plugin和maven-release-plugin两个插件。
4.0.0
org.springframework.boot spring-boot-starter-parent 2.3.8.RELEASE com.bingbing.sh hire-management-user-service 0.0.1-RELEASE hire-management-user-service Demo project for Spring Boot
11 2.2.1.RELEASE
pomorg.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-devtools runtime true org.springframework.boot spring-boot-starter-test test mysql mysql-connector-java com.alibaba druid 1.1.18 org.springframework.boot spring-boot-starter-data-jdbc org.springframework.boot spring-boot-configuration-processor true user-service com.alibaba.cloud spring-cloud-alibaba-dependencies ${spring.cloud.alibaba.version} pom import
org.springframework.boot spring-boot-maven-plugin
maven-compiler-plugin 3.8.1 ${java.version} ${java.version}
org.apache.maven.plugins maven-surefire-plugin 2.22.2 true
org.apache.maven.plugins maven-release-plugin 2.4.1
org.apache.maven.plugins maven-deploy-plugin 2.7
central https://maven.aliyun.com/repository/public maven-releases http://192.168.31.129:30081/repository/maven-releases/ maven-snapshots Internal Snapshots http://192.168.31.129:30081/repository/snapshots/
这样配置完后,需要在maven的settings.xml里加一个server配置, 其中id对应pom.xml文件里的id, pom.xml文件里的repository的id与nexus私服仓库里的id保持一致,比如我的nexus的release仓库叫maven-releases,那么id 都要用maven-releases。
maven-snapshots admin nexus847652.
maven-releases admin nexus847652.
发布成功后,进入到release仓库和public仓库都可以看到刚发布的服务:
再次执行同样的命令,idea报错:
Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.7:deploy (default-deploy) on project user-service: Failed to deploy artifacts: Could not transfer artifact com.bingbing.sh:user-service:jar:0.0.1-RELEASE from/to maven-releases (http://192.168.31.129:30081/repository/maven-releases/): Failed to transfer file: http://192.168.31.129:30081/repository/maven-releases/com/bingbing/sh/user-service/0.0.1-RELEASE/user-service-0.0.1-RELEASE.jar. Return code is: 400, ReasonPhrase: Repository does not allow updating assets: maven-releases.
我们只需要进入nexus,重新设置repositry的deployment policy 为allow redeploy即可: