一,Nexus简介
它是Sonatype公司的一个产品,叫Nexus,它是Maven的私服。事实上有三种专门的Maven仓库管理软件可以帮助我们创建私服,有Apache的Archiva;JFrog的Artifactory和Sonatype的Nexus。其中Archiva是开源的,Artifactory和Nexus的核心也是开源的。这里我们重点介绍Sonatype公司的Nexus。 【maven私服】,用于为公司提供私有服务的软件。
二,安装Nexus
基于Docker version 20.10.23安装
2.1、拉取镜像(无需操作)
安装版本:3.36.0
2.2、创建映射路径
创建如下目录:
同时为目录data授权
chmod 777 data
2.3、启动nexus
docker run -d --name nexus3 -p 8081:8081 --restart always -v /usr/local/docker/nexus/data:/nexus-data sonatype/nexus3:3.36.0
2.4、访问nexus
输出data下的admin.password,里面是admin的密码。
三,Nexus设置仓库
1.创建代理仓库
用来代理aliyun仓库
【1.】
【2.】
【3.】
http://maven.aliyun.com/nexus/content/groups/public/ 将该地址填写到上面的红框里。
2.创建本地快照仓库
3.创建发布版仓库
4.创建仓库组
5、修改配置文件
修改maven的setting.xml文件
两个server的id对应了配置的两个hosted仓库名称
<server>
<id>dz13_RELEASE</id>
<username>admin</username>
<password>123456</password>
</server>
<server>
<id>dz13_SNAPSHOT</id>
<username>admin</username>
<password>123456</password>
</server>
<!-- 删除阿里云的镜像,用我们自己的nexus地址 -->
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://192.168.3.43:8081/repository/dz13/</url>
</mirror>
<!-- 配置一套环境 -->
<profile>
<id>nexus</id>
<repositories>
<repository>
<id>central</id>
<url>http://192.168.3.43:8081/repository/dz13/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://192.168.3.43:8081/repository/dz13/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
<!-- 启用刚才配置的一套环境 -->
<activeProfiles>
<activeProfile>nexus</activeProfile>
</activeProfiles>
【执行一下jenkins,验证一下修改完ali镜像仓库了,原来的流水线代码是否可行】
【注意】
将原来流水线代码产生的文件都清空,在执行本次流水线代码。
四,maven仓库的jar类型
1、快照版
快照版jar是正在开发中的,没有经过大量测试的,是临时用的jar。每次提交jar到nexus会生成一个新的快照,而版本号不会改变,引入依赖时会自动引入最新的快照版本。
2、发布版
经过大量测试,已经完成全流程的jar。这个jar是稳定的,放心引用的。
五,Maven私服本地开发环境配置
1、项目的pom文件配置
<!--私服配置-->
<distributionManagement>
<repository>
<id>my-neuse-releases</id>
<name>Nexus Release Repository</name>
<url>http://192.168.3.43:8081/repository/IntelligentNetwork/</url>
</repository>
<snapshotRepository>
<id>my_repo_snapshot</id>
<name>Nexus Snapshot Repository</name>
<url>http://192.168.3.43:8081/repository/IntelligentNetwork/</url>
</snapshotRepository>
</distributionManagement>
2、修改当前工作空间下的maven引用
修改本地仓库maven的setting文件,配置方式和虚拟机中相同。【虚拟机中的setting文件修改了啥,本地仓库的setting文件也要改啥】
如果不修改本地仓库的配置文件,连接不到自己的私服,无法拉取私服中自己上传的jar。
根据路径找的setting文件后,进行修改。
3、修改本地项目打包插件,同时git提交到gitee仓库里:
#更换一下项目中的打包插件,同时 上传到gitee仓库里。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
六,Jenkins上传jar到nexus
1、流水线代码
第一阶段:从git下载代码
stage('pull code'){
git branch: 'master', credentialsId: '9a19cd80-bb02-4e8b-b126-f023bdebea7b', url: 'https://gitee.com/wztsl/dz12-demo01.git'
}
第二阶段:maven打包
由于最开始用来阿里云镜像,导致和私服产生了冲突,如果不配置私服时可以打包成功,配置私服就失败,可以把本地仓库中的jar删除,重新在私服下拉取依赖。
stage('compile'){
dir('/var/lib/jenkins/workspace/jar_demo01'){
sh 'mvn clean install'
}
}
#更换一下项目中的打包插件,同时 上传到gitee仓库里。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<attach>true</attach>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
第三阶段:上传nexus
注意:Dfile和Dsources不能用本地仓库中的,要用代码下target下的jar。如果用本地仓库会导致自己替换自己的问题,出现报错,无法上传。
stage('upload jar'){
sh "mvn deploy:deploy-file \
-DgroupId=com.jr \
-DartifactId=testNginx \
-Dversion=1.0-SNAPSHOT \
-Dpackaging=jar \
-Dfile=/var/lib/jenkins/workspace/jenkinsDemo1/target/testNginx-1.0-SNAPSHOT.jar \
-Dsources=/var/lib/jenkins/workspace/jenkinsDemo1/target/testNginx-1.0-SNAPSHOT-sources.jar \
-DpomFile=/usr/local/maven/apache-maven-3.3.9/repository/com/jr/testNginx/1.0-SNAPSHOT/testNginx-1.0-SNAPSHOT.pom \
-DrepositoryId=dz14_SNAPSHOT \
-Durl=http://192.168.43.8:8081/repository/dz14_SNAPSHOT/"
}
流水代码整合:
node {
stage('pull code'){
git branch: 'master', credentialsId: '9a19cd80-bb02-4e8b-b126-f023bdebea7b', url: 'https://gitee.com/wztsl/dz12-demo01.git'
}
stage('compile'){
dir('/var/lib/jenkins/workspace/jar_demo01'){
sh 'mvn clean install'
}
}
stage('upload jar'){
sh "mvn deploy:deploy-file \
-DgroupId=com.jr \
-DartifactId=testNginx \
-Dversion=1.0-SNAPSHOT \
-Dpackaging=jar \
-Dfile=/var/lib/jenkins/workspace/jenkinsDemo1/target/testNginx-1.0-SNAPSHOT.jar \
-Dsources=/var/lib/jenkins/workspace/jenkinsDemo1/target/testNginx-1.0-SNAPSHOT-sources.jar \
-DpomFile=/usr/local/maven/apache-maven-3.3.9/repository/com/jr/testNginx/1.0-SNAPSHOT/testNginx-1.0-SNAPSHOT.pom \
-DrepositoryId=dz14_SNAPSHOT \
-Durl=http://192.168.43.8:8081/repository/dz14_SNAPSHOT/"
}
}
配置共有9项,4+3+2
4个工程自己的配置,这四个对应了pom.xml文件中的配置
-DgroupId
-DartifactId
-Dversion
-Dpackaging(是包的类型,基本都会配置成jar,少数会配置成pom。jar就是一个依赖的jar包,pom是做依赖传递的)
3个要上传的文件
-Dfile:jar包
-Dsources:源码jar包
-DpomFile:.pom文件,做依赖传递
2个私服仓库配置
-DrepositoryId:仓库名称
-Durl:仓库地址
【前4个元素值:】
【中间3个元素值:】
【后面2个元素值:】
【最后执行流水线代码前,先删除掉之前产生的文件代码,就可以执行成功了】