当前位置: 代码迷 >> 综合 >> Nexus 制品库 04 上传制品第一种方式 mvn deploy
  详细解决方案

Nexus 制品库 04 上传制品第一种方式 mvn deploy

热度:95   发布时间:2023-09-30 12:32:10.0

CI流水线中制品库集成


在开始引入制品的时候,就应该根据公司的规模和团队特点制定制品库的管理和使用规范。 设置了标准化的规范之后就可以轻松的实现自动化了。

制品规范定义

版本号

  • 主版本号:表示项目的重大架构变更。
  • 次版本号:表示较大范围的功能增加和变化。
  • 修订版本号:表示重大Bug的修复。
  • 里程碑版本:表示某一个版本的里程碑。

仓库命名

类型

格式

示例

仓库组

<技术>-group

maven-group

仓库

<业务简称>-<技术>-<类型>

devops-maven-RELEASE

制品

<应用名称 artifactId>-<版本号 version>

demo-devops-service-1.1.0.jar

可以为每个部门创建一个仓库, 或者每个业务创建仓库。

目录结构: 按照 业务--------》服务-----------》版本     层级。

 

maven类型仓库


现在有个项目的制品,怎么上传到仓库中?先创建私有的仓库,存放内部的包 

Nexus 制品库 04 上传制品第一种方式 mvn deploy

Nexus 制品库 04 上传制品第一种方式 mvn deploy

是否允许重传,比如这次包是1.1.1,那么下次传包还是否允许1.1.1,所以这里不让允许上传相同的版本号。

上面就创建好了maven类型仓库,maven类型的仓库是需要配置认证信息的,

这个是maven的配置文件,指定从哪里下载包,源有哪些以及源的认证信息。 

[root@jenkins-agent ~]# vim /usr/local/apache-maven-3.8.1/conf/settings.xml

配置文件里面定义了本地缓存,也就是构建节点上有个缓存仓库,这个仓库就可以从私服里面下载下来

  <!-- localRepository| The path to the local repository maven will use to store artifacts.|| Default: ${user.home}/.m2/repository<localRepository>/path/to/local/repo</localRepository>-->

所有的包,如果要修改路径可以在maven里面去修改,在容器里面进行编译构建的时候,如果想要缓存下来,那么就需要在容器里面挂载持久化的存储,那么就可以在这指定好挂载的存储的路径,指定挂载点。

在k8s里面也一样,创建一个pvc绑定到pod里面,后面maven打包的时候就可以指定它。 

容器销毁之后再去创建还会复用pvc,那么还会使用到这些缓存 

[root@jenkins-agent ~]# cd .m2/
[root@jenkins-agent .m2]# ls
repository
[root@jenkins-agent .m2]# cd repository/
[root@jenkins-agent repository]# ls
aopalliance  asm  backport-util-concurrent  ch  classworlds  com  commons-codec  commons-io  commons-logging  io  jakarta  javax  junit  net  org

server里面是去配置nexus认证信息 (仓库已经有了, 此时我们需要配置maven的配置文件,在settings.xml中添加仓库的认证信息。如下:)

    <server><id>maven-hosted</id><username>admin</username><password>admin123</password></server></servers>

手动上传包 


上传制品之前, 肯定得保证这仓库是存在的。上面就将仓库创建好了,接下来就是上传包了

Nexus 制品库 04 上传制品第一种方式 mvn deploy

Nexus 制品库 04 上传制品第一种方式 mvn deploy

可以看到上传想要这么多的参数,在maven类型的仓库里面组件信息有三个部分,这些和pom.xml对应起来,所以上面的信息就是pom.xml里面的信息。

        </parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version>

Nexus 制品库 04 上传制品第一种方式 mvn deploy

 Group ID + Artifact ID + Packaging

 

使用maven deploy 指令上传制品  自定义pom信息(灵活,用的最多)


这个就不需要去读取pom文件,因为有些项目的pom本来就不规范,一下子要规范化pom很难,所以还是这种方式灵活,用的最多。 

Nexus 制品库 04 上传制品第一种方式 mvn deploy

制品对pom文件其实是没有要求的! 制品打完包之后一般在target目录下面。

参考:https://support.sonatype.com/hc/en-us/articles/213465818-How-can-I-programmatically-upload-an-artifact-into-Nexus-2-

mvn deploy:deploy-file
-DgroupId=xxxxxx pom中的groupId
-DartifactId=xxxxxx pom中的artifactId
-Dversion=xxxxxx pom中的版本号version
-Dpackaging=xxxxxx pom中打包方式
-Dfile=xxxxxx 本地文件
-Durl=xxxxxx 仓库url
-DrepositoryId=xxxxxx 对应的是setting.xml(认证)

不加认证会报错 

mvn deploy:deploy-file \
-DgroupId=com.devops \
-DartifactId=lulei \
-Dversion=1.1.1 \
-Dpackaging=jar  \
-Dfile=target/demo-0.0.1-SNAPSHOT.jar \
-Durl=http://139.198.166.235:8082/repository/devops-maven/ 

 注意使用mvn deploy 发布时,-DrepositoryId参数的值要与maven的配置文件中的<server>中的<id>一致。不然会出现401,用户认证失败的问题。

[root@jenkins-agent devops-maven-service-master]# vim /usr/local/apache-maven-3.8.1/conf/settings.xml <server><id>maven-hosted</id><username>admin</username><password>admin123</password></server></servers>
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  44.558 s
[INFO] Finished at: 2021-09-09T16:17:54+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file (default-cli) on project demo: Failed to deploy artifacts: Could not transfer artifact com.devops:lulei:jar:1.1.1 from/to remote-repository (http://139.198.166.235:8082/repository/devops-maven/): authentication failed for http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/1.1.1/lulei-1.1.1.jar, status: 401 Unauthorized -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

加上认证信息: 

mvn deploy:deploy-file \
-DgroupId=com.devops \
-DartifactId=lulei \
-Dversion=1.1.1 \
-Dpackaging=jar  \
-Dfile=target/demo-0.0.1-SNAPSHOT.jar \
-Durl=http://139.198.166.235:8082/repository/devops-maven/ \
-DrepositoryId=maven-hosted[INFO] --- maven-deploy-plugin:2.8.2:deploy-file (default-cli) @ demo ---
Uploading to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/1.1.1/lulei-1.1.1.jar
Uploaded to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/1.1.1/lulei-1.1.1.jar (17 MB at 440 kB/s)
Uploading to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/1.1.1/lulei-1.1.1.pom
Uploaded to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/1.1.1/lulei-1.1.1.pom (389 B at 5.5 kB/s)
Downloading from maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/maven-metadata.xml
Uploading to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/maven-metadata.xml
Uploaded to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/devops/lulei/maven-metadata.xml (295 B at 4.3 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  40.570 s
[INFO] Finished at: 2021-09-09T16:21:46+08:00
[INFO] ------------------------------------------------------------------------

 包上传成功之后,可以看到如下信息 

Nexus 制品库 04 上传制品第一种方式 mvn deploy

 

 

使用maven指令上传制品 直接读取pom文件(方便)


如果在源码文件pom.xml定义好了这些信息,那么就可以读取pom.xml里面的这些信息了,那么就不需要和上面一样去自己定义信息了。

        </parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1.1</version>
mvn deploy:deploy-file \
-DgeneratePom=false \
-DrepositoryId=maven-hosted \
-Durl=http://139.198.166.235:8082/repository/devops-maven/ \
-DpomFile=pom.xml \
-Dfile=target/demo-0.0.1-SNAPSHOT.jar[INFO] --- maven-deploy-plugin:2.8.2:deploy-file (default-cli) @ demo ---
Uploading to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/0.0.1.1/demo-0.0.1.1.jar
Uploaded to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/0.0.1.1/demo-0.0.1.1.jar (17 MB at 460 kB/s)
Uploading to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/0.0.1.1/demo-0.0.1.1.pom
Uploaded to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/0.0.1.1/demo-0.0.1.1.pom (1.2 kB at 24 kB/s)
Downloading from maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/maven-metadata.xml
Downloaded from maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/maven-metadata.xml (343 B at 7.6 kB/s)
Uploading to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/maven-metadata.xml
Uploaded to maven-hosted: http://139.198.166.235:8082/repository/devops-maven/com/example/demo/maven-metadata.xml (357 B at 5.9 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  38.910 s
[INFO] Finished at: 2021-09-09T16:31:58+08:00
[INFO] ------------------------------------------------------------------------

Nexus 制品库 04 上传制品第一种方式 mvn deploy

 

版本问题


FAQ: release类型的仓库只能上传release版本的包。如果你尝试用snapshot包上传到release类型的仓库时会遇到这些错误的。

包是snapshot版本就不能上传到release仓库里面,需要开发人员去修改pom文件 

 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file (default-cli) on project demo: Failed to deploy artifacts: Could not transfer artifact com.example:demo:jar:0.0.1 from/to maven-hosted (http://192.168.1.200:8081/repository/maven-zeyang-test/): transfer failed for http://192.168.1.200:8081/repository/maven-zeyang-test/com/example/demo/0.0.1/demo-0.0.1.jar, status: 400 Repository version policy: SNAPSHOT does not allow version: 0.0.1 -> [Help 1]

Nexus 制品库 04 上传制品第一种方式 mvn deploy

解决方法:

1. 更新pom中的版本号

<groupId>com.example</groupId>
<artifactId>myapp</artifactId>
<version>0.0.2-SNAPSHOT</version>    //改成0.0.2-RELEASE

2. 对号入座,上传到对应类型的仓库,将包上传到snapshot类型的仓库:

mvn deploy:deploy-file \
-DgeneratePom=false \
-DrepositoryId=maven-hosted \
-Durl=http://192.168.1.200:8081/repository/devops-maven-snapshot/ \
-DpomFile=pom.xml \
-Dfile=target/demo-0.0.1-SNAPSHOT.jar

Nexus 制品库 04 上传制品第一种方式 mvn deploy

  相关解决方案