1 Nexus安装配置
1.1 Nexus介绍
Nexus 是 Sonatype 公司发布的一款仓库(Repository)管理软件,常用来搭建 Maven 私仓,所以也有人将 Nexus 称为“Maven仓库管理器”。
Maven 私仓其实并不是 Maven 的核心概念,它仅仅是一种衍生出来的特殊的仓库,但这并不代表它不重要,相反由于私仓具有降低中央仓库负荷、节省外网带宽、以及提高项目稳定性等优点,使得私仓在实际开发过程中得到了相当普遍地使用。能够帮助我们建立私仓的软件被称为 Maven 仓库管理器,主要有以下 3 种:
- · Apache Archiva
- · JFrog Artifactory
- · Sonatype Nexus
其中,Sonatype Nexus 是当前最流行,使用最广泛的 Maven 仓库管理器。Nexus 分为开源版和专业版,其中开源版足以满足大部分 Maven 用户的需求。Nexus 开源版具有以下特性:
- · 占用内存小(28 M 左右)
- · 具有基于 ExtJs 得操作界面,用户体验较好
- · 使用基于 Restlet 的完全 REST API
- · 支持代理仓库、宿主仓库和仓库组
- · 基于文件系统,不需要依赖数据库
- · 支持仓库索引以及搜索
- · 支持在界面上上传构件
- · 安全控制
1.2 Nexus安装
目前 Nexus 分为 Nexus 2.x 和 Nexus 3.x 两个大版本,它们是并行的关系
官网地址https://www.sonatype.com/
tar -xf nexus-3.19.1-01-unix.tar.gz -C /app/module/
ln -s /app/module/nexus-3.19.1-01/ /app/module/nexus
修改配置
vim /app/module/nexus/bin/nexus.rc
run_as_user="root" #nexus进程运行用户
vim /app/module/nexus/etc/nexus-default.properties
#nexus监听端口
application-port=80
#nexus监听地址
application-host=0.0.0.0
1.3 Nexus启动
- /app/module/nexus/bin/nexus start
1.4 Nexus访问
初始化四部曲
1.5 Nexus报错处理
vim /etc/security/limits.conf
添加
root soft nofile 65536
root hard nofile 65536
#重启nexus
/app/module/nexus/bin/nexus restart
1.6 配置Nexus仓库代理
配置nexus的中央仓库(加速jar包的下载以及缓存jar包)
滚动到最后面SAVE
2 Maven配置Nexus
2.1 修改setings.xml
#将原来的备份
cp /app/module/maven/conf/settings.xml{,.bk}
修改配置
vim /app/module/maven/conf/settings.xml
#配置nexus认证
<servers>
<server>
<id>maven-snapshots</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>maven-releases</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>maven-central</id>
<username>admin</username>
<password>123456</password>
</server>
</servers>
#配置nexus仓库,将原先阿里云那些配置删掉
<mirrors>
<mirror>
<id>maven-central</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.137.130/repository/maven-central/</url>
</mirror>
<mirror>
<id>maven-snapshots</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.137.130/repository/maven-snapshots/</url>
</mirror>
<mirror>
<id>maven-releases</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.137.130/repository/maven-releases/</url>
</mirror>
</mirrors>
2.2 测试打包
打包完以后,私仓已经出现依赖包
3 上传war包到Nexus
3.1 手动上传
进入项目job目录
cd /app/jenkins/workspace/test03
上一步测试maven连接Nexus已经做过maven编译打包操作
mvn deploy:deploy-file \
-DgroupId=com.itheima \
-DartifactId=web_demo \
-Dversion=1.0 \
-Dpackaging=war \
-Dfile=target/web_demo-1.0-SNAPSHOT.war \
-Durl=http://192.168.137.130/repository/maven-releases/ \
-DrepositoryId=maven-releases \
-DgeneratePom=true
#这些配置基本上都可以在pom里面看到
特别注意
-Dversion=1.0,如果pom里面写的有中文比如<version>1.0-SNAPSHOT</version>,也要只保留数字和点
-Dversion中带着-SNAPSHOT无法上传到releases仓库,会直接报错
3.1.1 解决releases同版本只能推送一次
snapshots推送多次相同版本的会覆盖,releases同一版本只允许推送一次
再次推送就会报错
保存退出,再次推送就会覆盖掉
3.2 配置pom打包自动推送
可不可以构建完自动上传
配置放在打包的pom.xml里面,注意放在project里面
<distributionManagement>
<repository>
<id>maven-releases</id>
<url>http://192.168.137.130/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://192.168.137.130/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
打包命令
mvn clean package deploy
解释:
<distributionManagement> 中的 <repository> 和 <snapshotsrepository>各自的含义
maven仓库分为两种 release发布仓库(<repository>) 和 snapshot快照仓库(<snapshotsrepository>)。
snapshot快照仓库用于保存开发过程中的不稳定版本。
release正式仓库用来保存稳定的发行版本。
定义一个组件/模块为快照版本 只需要在pom文件中的该模板的版本号后面加上 -SNAPSHOT就可以了。
注意:必须是大写。
maven会根据模块的版本号(pom文件中的<version>版本号</version>)中是否带有-SNAPSHOT来判断这个是快照版本还是正式版本。
如果是快照版本:
在mvn deploy时会自动发布到快照版本库中。
而使用快照版本的模块,在不更改版本号的情况下,直接编译打包时,maven会自动从镜像服务器上下载最新的快照版本。
如果是正式发布版本:
那么在mvn deploy时会自动发布到正式版本库中。
而使用正式版本的模块,在不更改版本号的情况下,编译打包时,如果本地已经存在该版本的模块则使用本地的而不是主动去镜像服务器上下载。
3.2.1 正式版本
pom中 <version>1.0</version>
3.2.2 快照版本
pom中 <version>1.0-SNAPSHOT</version>
如果推送多次
4 Nexus下载war包
wget --http-user=admin --http-passwd=123456 http://192.168.137.130/repository/maven-releases/com/itheima/web_demo/1.0/web_demo-1.0.war
5 Jenkins集成Nexus
5.1 Jenkins推送war包到Nexus
mkdir /app/module/script
vim /app/module/script/push_war.sh
#!/bin/bash
#通过pom获取信息
groupId=$(mvn help:evaluate -Dexpression=project.groupId | egrep -v "[INFO]")
artifactId=$(mvn help:evaluate -Dexpression=project.artifactId | egrep -v "[INFO]")
version=$(mvn help:evaluate -Dexpression=project.version | egrep -v "[INFO]")
packaging=$(mvn help:evaluate -Dexpression=project.packaging | egrep -v "[INFO]")
#上传至nexus
mvn deploy:deploy-file \
-DgroupId=${groupId} \
-DartifactId=${artifactId} \
-Dversion=${version} \
-Dpackaging=${packaging} \
-Dfile=target/${artifactId}-${version}.${packaging} \
-Durl=http://192.168.137.130/repository/maven-releases/ \
-DrepositoryId=maven-releases \
-DgeneratePom=true
chmod a+x /app/module/script/push_war.sh
5.2 Jenkins从Nexus下载war包
5.2.1 安装插件
安装Maven Artifact ChoiceListProvider (Nexus)插件