Jenkins制品管理(中)

2021-06-02 17:52:25 浏览数 (1)

三.Nexus

maven上传

nexus搭建好后,就可以使用deploy上传jar或者war包到nexus中。Deploy插件是Apache Maven团队提供的官方插件,能将JAR包及POM文件发布到Nexus中。目前该插件的最新版本是2.8.2,如果不需要自定义Deploy插件配置,则不需要在POM文件中定义。

  1. <plugins>
  2. <plugin>
  3. <groupid>org.apache.maven.plugins</groupId>
  4. <artifactId>maven-deploy-plugin</artifactId>
  5. <version>2.8.2</version>
  6. </plugin>
  7. </plugins>

使用Deploy插件发布需要以下几个步骤

1.配置发布地址,在Maven项目的POM文件中加入∶

  1. <distributionManagement>
  2. <snapshotRepository>
  3. <id>nexus-snapshot</id>
  4. <name>my nexus snapshot</name>
  5. <url>http://<你的Nexus地址>/repository/maven-snapshots</url>
  6. </snapshotRepository>
  7. <repository>
  8. <id>nexus-release</id>
  9. <name>my nexus release</name>
  10. <url>http://<你的Nexus地址>/repository/maven-releases</url>
  11. </repository>
  12. </distributionManagement>

完成此步骤后,我们就可以通过执行mvn clean deploy进行发布了。Deploy插件会根据Maven项目中定义的version值决定是使用nexus-snapshot仓库还是nexus-release仓库。当version值是以-SNAPSHOT后缀结尾时,则发布到nexus-snapshot仓库

2.配置访问Nexus的用户名和密码才能发布制品,需要在Maven的settings.xml中加入:

  1. <servers>
  2. <server>
  3. <id>nexus-snapshot</id>
  4. <username>admin</username>
  5. <password>admin123</password>
  6. </server>
  7. <server>
  8. <id>nexus-release</id>
  9. <username>admin</username>
  10. <password>admin123</password>
  11. </server>
  12. </servers>

jenkins上传

除了可以通过Maven发布JAR包,还可以使用Nexus Platform来插件实现。最新版本的Nexus Platform ( 3.3.20180801-112343.4970c8a )已经同时支持Nexus 2.x和Nexus 3.x,只是它的文档更新不及时,大家都不知道它支持3.x版本了。

在安装好Nexus Platform插件后,根据以下步骤来使用。 1.进入Manage Jenkins→Configure System→Sonatype Nexus页,设置Nexus 3.x的服务器地址

需要注意的是:

  • 在“Credentials”选项处,增加了一个具有发布制品到Nexus中的权限的用户名和密码凭证
  • Server ID字段的值,在Jenkinsfile中会引用

设置完成后,单击“Test connection”按钮测试设置是否正确。

2.在Jenkinsfile中加入nexusPublisher步骤

  1. stage('Build') {
  2. steps {
  3. sh "mvn clean test package"
  4. nexusPublisher(
  5. nexusInstanceId: 'nexus3',
  6. nexusRepositoryId: 'maven-releases',
  7. packages: [
  8. [
  9. $class: "MavenPackage',
  10. mavenAssetList: [
  11. [classifier: '',
  12. extension: '',
  13. filePath: './target/server-1.0-SNAPSHOT.jar'
  14. ]
  15. ],//end of mavenAssetList
  16. mavenCoordinate: [
  17. artifactId: 'server',
  18. groupId: 'codes.showme',
  19. packaging: 'jar', version: '1.0'
  20. ]
  21. ] //end of packages])
  22. ])
  23. }
  24. }

下面简单介绍一下nexusPublisher的参数。

  • nexusInstanceld :在Jenkins中配置Nexus 3.x时的Server lD
  • nexusRepositoryld :发布到Nexus服务器的哪个仓库
  • mavenCoordinate : Maven包的坐标,packaging值与Maven中的packaging值一致,可以是jar、war、pom、hpi等。
  • mavenAssetList:要发布的文件,如果是pom.xml,则extension必须填“xml”

在实际工作中,笔者并不常使用此插件。原因如下: 1.每个Maven项目都可能不同,必须为每个Maven项目写nexusPublisher方法 2.对于多模块的Maven项目,nexusPublisher的参数写起来十分啰唆

但是介绍这个插件还是有必要的,一是大家可以根据实际情况进行选择;二是可以了解Jenk-ins与Nexus的集成程度。

管理raw

进入Administration→Repository→Repositories页,单击“raw ( hosted )”,进入raw仓库创建页,输入仓库名称“raw-example”,单击“Create repository”按钮,确认后创建成功。

该仓库的地址是:<你的Nexus地址>/repository/raw-examplel

使用HTTP客户端就可以将制品上传到raw仓库中,使用curl命令 1.在Jenkins上添加“Username with password”凭证

2.在Jenkinsfile中加入上传制品的步骤

  1. pipeline {
  2. agent any
  3. environment {
  4. nexusRawUsernamePassword = credentials('nexusRaw')
  5. }
  6. stages {
  7. stage('Build') {
  8. steps {
  9. sh "curl --user '${nexusRawUsernamePassword}' --upload-file ./readme.md http://10.33.193.82:8081/repository/raw-example/${BUILD_NUMBER}/readme.md"
  10. }
  11. }
  12. }
  13. }

为简单起见,我们直接使用构建号作为目录名称来区分每次上传的制品。curl命令的格式为: curl --user '<username:password>' --upload-file <待上传制品的路径〉〈将制品保存到Nexus上的全路径>

将制品保存到Nexus上的全路径∶如果目录不存在,Nexus将会自动创建。

3.在Nexus中,我们看到readme.md文件已经上传成功

在Jenkins pipeline中获取原始制品时,我们同样使用curl命令。

代码语言:javascript复制
sh "curl --user '${nexusRawUsernamePassword}' -o readme.md http://10.33.193.82:8081/repository/raw-example/2/readme.md"

0 人点赞