Jenkins maven将jar部署到nexus - artifact命名

时间:2012-05-10 12:10:02

标签: maven jenkins nexus

我的java / maven项目名为" testproject"与我的jenkins和nexus repo联系在一起:

我的pom.xml看起来像:

....    
<distributionManagement>
    <!-- use the following if you're not using a snapshot version. -->
    <repository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>http://nexus:8080/nexus/content/repositories/releases</url>
    </repository>
    <!-- use the following if you ARE using a snapshot version. -->
    <snapshotRepository>
        <id>nexus</id>
        <name>RepositoryProxy</name>
        <url>http://nexus:8080/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
</distributionManagement>
......

在我的jenkins设置中,我有:

Build - maven3 - clean deploy

正如所料,jenkins将工件上传到jenkins构建的控制台输出的Nexus.Look,如下所示:

[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ testproject ---
[INFO] Building jar: /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ testproject ---
[INFO] Installing /var/lib/jenkins/workspace/testproject/target/testproject-0.1-SNAPSHOT.jar to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-   SNAPSHOT.jar
[INFO] Installing /var/lib/jenkins/workspace/testproject/pom.xml to /var/lib/jenkins/.m2/repository/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-SNAPSHOT.pom
[INFO] 
[INFO] --- maven-deploy-plugin:2.5:deploy (default-deploy) @ testproject ---
Downloading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml
Downloaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/maven-metadata.xml (1012 B at 28.2 KB/sec)
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.jar (47 KB at 748.5 KB/sec)
Uploading: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom
Uploaded: http://nexus:8080/nexus/content/repositories/snapshots/com/dummy/testproject/0.1-SNAPSHOT/testproject-0.1-20120509.161644-74.pom (6 KB at 149.3 KB/sec)

问题

鉴于我在pom.xml中指定的版本是

<version>0.1-SNAPSHOT</version>
  1. 为什么jenkins会将testproject- 0.1-20120509.161644-74 .jar上传到Nexus? 20120509.161644-74来自哪里?

  2. 如果在上传之前由jenkins生成时间戳 20120509.161644-74 ,我可以配置它的格式吗?我希望有类似testproject-01的东西 - $ {timestamp} - $ {reversionId} .jar

3 个答案:

答案 0 :(得分:8)

maven deploy plugin page告诉“默认情况下,当工件的快照版本部署到存储库时,会为其后缀一个时间戳”。因此,当您致电mvn deploy时,它会由插件创建。

我不知道你想要的是什么2)是可能的。我认为这可能会给maven造成一些麻烦。

当您使用具有SNAPSHOT依赖关系的maven时,时间戳用于检查最新版本的SNAPSHOT。更改快照的格式可能会导致此机制失败。

答案 1 :(得分:2)

自Maven 3以来,时间戳在SNAPSHOT版本中添加。 使用Maven 2执行时,相同的部署插件不会添加任何时间戳。

答案 2 :(得分:1)

这是Maven锁定快照版本的方式,因此另一个版本可以使用特定版本 - 它可以解决问题,但它有缺点。

我带着快照到处走走了。我相信他们只是邪恶。构建可重复性是一件令人头疼的事情,因为将部署到存储库的带时间戳的快照版本与特定代码提交相关联非常繁琐。

在构建/部署之前,请在构建服务器上调用mvn版本,然后让构建服务器调用mvn版本。使用相同版本标记源代码。如果构建失败,那么无关紧要,可以将构建配置为刷新工作空间,使pom.xml文件的更改无关紧要。

另一个典型的Maven&#34; gotcha&#34;在使用快照时,您不确定您的pom在构建期间可能正在消耗哪些版本的依赖项,因此请确保构建调用依赖项:树和依赖项:list,在其他mvn构建参数之前。 (这将帮助您在传递解析期间识别同一工件的版本不一致 - 我现在在我的构建中的DependencyManagement部分发誓。)

虽然Maven走了很长的路,但是Maven Way&#34;并非总是最好的解决方案。对于持续交付最佳实践而言,它相当不够成熟,但您仍然可以有效地使用它,让您意识到这些陷阱。