问:如何使用 groovy 管道将工件保存到 Nexus 存储库中?
Q: How can I save an artifact into Nexus Repository using a groovy pipeline?
我的问题是关于将工件保存到存储库中。特别是,我试图在执行 Maven 项目的构建管道(通过 Jenkins)后将工件和发布版本上传到 Nexus Repository。
我想要这样做的唯一方法就是使用 Groovy 中编写的管道,以便与 Jenkins 集成。
注意:我希望工件版本号始终相同并且版本号动态(而不是手动)更改。
是否有一般的命令或代码可以让我这样做?
你进错层了,这应该在maven中发生。
在 pom.xml 你需要。 (more here)
<distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
然后在插件部分
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
而且您应该能够从您的管道中 mvn clean deploy
。
编辑
还有另一种方法 Nexus Artifact Uploader plugin
nexusArtifactUploader {
nexusVersion('nexus2')
protocol('http')
nexusUrl('localhost:8080/nexus')
groupId('sp.sd')
version("2.4.${env.BUILD_NUMBER}")
repository('NexusArtifactUploader')
credentialsId('44620c50-1589-4617-a677-7563985e46e1')
artifact {
artifactId('nexus-artifact-uploader')
type('jar')
classifier('debug')
file('nexus-artifact-uploader.jar')
}
artifact {
artifactId('nexus-artifact-uploader')
type('hpi')
classifier('debug')
file('nexus-artifact-uploader.hpi')
}
}
同样有效的其他解决方案
我手动执行了,我导出了Nexus调用的结果。结果是以下命令。此命令需要作为 Groovy 代码插入到 Jenkins 管道中:
nexusPublisher nexusInstanceId: 'nexus', nexusRepositoryId: 'maven-play-ground', packages: [[$class: 'MavenPackage', mavenAssetList: [[classifier: '', extension: '', filePath: '**PATH_NAME_OF_THE_ARTIFACT**.jar']], mavenCoordinate: [artifactId: '**YOUR_CUSTOM_ARTIFACT_ID**', groupId: 'maven-play-ground', packaging: 'jar', version: '1.0']]], tagName: '**NAME_OF_THE_FILE_IN_THE_REPOSITORY**' }
- 在 filePath 字段中,我们需要插入 artifact.jar 文件的路径和名称。
- 在 artifactId 字段中,我们需要插入自定义(在这种情况下用于我的神器)神器 id
- 在 tagName 字段中,我们需要从 Nexus Repository 中插入目录的自定义名称
这是一个无需手动更改和编辑即可自动完成的解决方案。一旦我们在 Nexus 存储库中创建了目录,这将毫无问题地执行,并且不需要更改版本号。
注意:我们还需要从 Nexus 存储库设置中启用重新部署功能。
正如@hakamairi已经说过的,不建议将具有相同版本的工件重新上传到 Nexus 存储库,Maven 是围绕工件的 GAV 始终对应于唯一工件的想法构建的。
但是,如果要允许重新部署,则需要将发布存储库的部署策略设置为"allow redeploy",然后才能重新部署相同的版本。如果不在存储库端允许,您不能这样做。
要部署到 Nexus 存储库,您可以使用 Nexus Platform Plugin or Nexus Artifact Uploader。
我的问题是关于将工件保存到存储库中。特别是,我试图在执行 Maven 项目的构建管道(通过 Jenkins)后将工件和发布版本上传到 Nexus Repository。
我想要这样做的唯一方法就是使用 Groovy 中编写的管道,以便与 Jenkins 集成。
注意:我希望工件版本号始终相同并且版本号动态(而不是手动)更改。
是否有一般的命令或代码可以让我这样做?
你进错层了,这应该在maven中发生。 在 pom.xml 你需要。 (more here)
<distributionManagement>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://localhost:8081/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
然后在插件部分
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
</plugin>
而且您应该能够从您的管道中 mvn clean deploy
。
编辑 还有另一种方法 Nexus Artifact Uploader plugin
nexusArtifactUploader {
nexusVersion('nexus2')
protocol('http')
nexusUrl('localhost:8080/nexus')
groupId('sp.sd')
version("2.4.${env.BUILD_NUMBER}")
repository('NexusArtifactUploader')
credentialsId('44620c50-1589-4617-a677-7563985e46e1')
artifact {
artifactId('nexus-artifact-uploader')
type('jar')
classifier('debug')
file('nexus-artifact-uploader.jar')
}
artifact {
artifactId('nexus-artifact-uploader')
type('hpi')
classifier('debug')
file('nexus-artifact-uploader.hpi')
}
}
同样有效的其他解决方案
我手动执行了,我导出了Nexus调用的结果。结果是以下命令。此命令需要作为 Groovy 代码插入到 Jenkins 管道中:
nexusPublisher nexusInstanceId: 'nexus', nexusRepositoryId: 'maven-play-ground', packages: [[$class: 'MavenPackage', mavenAssetList: [[classifier: '', extension: '', filePath: '**PATH_NAME_OF_THE_ARTIFACT**.jar']], mavenCoordinate: [artifactId: '**YOUR_CUSTOM_ARTIFACT_ID**', groupId: 'maven-play-ground', packaging: 'jar', version: '1.0']]], tagName: '**NAME_OF_THE_FILE_IN_THE_REPOSITORY**' }
- 在 filePath 字段中,我们需要插入 artifact.jar 文件的路径和名称。
- 在 artifactId 字段中,我们需要插入自定义(在这种情况下用于我的神器)神器 id
- 在 tagName 字段中,我们需要从 Nexus Repository 中插入目录的自定义名称
这是一个无需手动更改和编辑即可自动完成的解决方案。一旦我们在 Nexus 存储库中创建了目录,这将毫无问题地执行,并且不需要更改版本号。
注意:我们还需要从 Nexus 存储库设置中启用重新部署功能。
正如@hakamairi已经说过的,不建议将具有相同版本的工件重新上传到 Nexus 存储库,Maven 是围绕工件的 GAV 始终对应于唯一工件的想法构建的。
但是,如果要允许重新部署,则需要将发布存储库的部署策略设置为"allow redeploy",然后才能重新部署相同的版本。如果不在存储库端允许,您不能这样做。
要部署到 Nexus 存储库,您可以使用 Nexus Platform Plugin or Nexus Artifact Uploader。