三.Nexus
maven上传
nexus搭建好后,就可以使用deploy上传jar或者war包到nexus中。Deploy插件是Apache Maven团队提供的官方插件,能将JAR包及POM文件发布到Nexus中。目前该插件的最新版本是2.8.2,如果不需要自定义Deploy插件配置,则不需要在POM文件中定义。
<plugins>
-
<plugin>
-
<groupid>org.apache.maven.plugins</groupId>
-
<artifactId>maven-deploy-plugin</artifactId>
-
<version>2.8.2</version>
-
</plugin>
</plugins>
使用Deploy插件发布需要以下几个步骤
1.配置发布地址,在Maven项目的POM文件中加入∶
<distributionManagement>
-
<snapshotRepository>
-
<id>nexus-snapshot</id>
-
<name>my nexus snapshot</name>
-
<url>http://<你的Nexus地址>/repository/maven-snapshots</url>
-
</snapshotRepository>
-
<repository>
-
<id>nexus-release</id>
-
<name>my nexus release</name>
-
<url>http://<你的Nexus地址>/repository/maven-releases</url>
-
</repository>
</distributionManagement>
完成此步骤后,我们就可以通过执行mvn clean deploy进行发布了。Deploy插件会根据Maven项目中定义的version值决定是使用nexus-snapshot仓库还是nexus-release仓库。当version值是以-SNAPSHOT后缀结尾时,则发布到nexus-snapshot仓库
2.配置访问Nexus的用户名和密码才能发布制品,需要在Maven的settings.xml中加入:
<servers>
-
<server>
-
<id>nexus-snapshot</id>
-
<username>admin</username>
-
<password>admin123</password>
-
</server>
-
<server>
-
<id>nexus-release</id>
-
<username>admin</username>
-
<password>admin123</password>
-
</server>
</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步骤
stage('Build')
{
steps {
sh "mvn clean test package"
nexusPublisher(
nexusInstanceId:
'nexus3',
nexusRepositoryId:
'maven-releases',
packages:
[
-
[
$class:
"MavenPackage',
mavenAssetList: [
[classifier: '',
extension: '',
filePath: './target/server-1.0-SNAPSHOT.jar'
]
],//end of mavenAssetList
mavenCoordinate: [
artifactId: 'server',
groupId: 'codes.showme',
packaging: 'jar', version: '1.0'
]
] //end of packages])
])
}
}
下面简单介绍一下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中加入上传制品的步骤
pipeline {
agent any
environment {
nexusRawUsernamePassword = credentials('nexusRaw')
-
}
stages {
stage('Build')
{
steps {
sh "curl --user '${nexusRawUsernamePassword}' --upload-file ./readme.md http://10.33.193.82:8081/repository/raw-example/${BUILD_NUMBER}/readme.md"
-
}
-
}
-
}
}
为简单起见,我们直接使用构建号作为目录名称来区分每次上传的制品。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"