7

我的名为“testproject”的 java/maven 项目与我的 jenkins 和 nexus 存储库相关联:

我的 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>
......

在我的詹金斯设置中,我有:

Build - maven3 - clean deploy

正如预期的那样,jenkins 将工件上传到 Nexus。查看 jenkins build 的控制台输出,如下所示:

[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. 詹金斯如何将 testproject- 0.1-20120509.161644-74 .jar 上传到 Nexus?20120509.161644-74 的东西来自哪里?

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

4

3 回答 3

9

maven 部署插件页面告诉“默认情况下,当工件的快照版本部署到存储库时,时间戳后缀为它”。因此,它是由插件在您调用时创建的mvn deploy

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

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

于 2012-05-10T12:43:23.060 回答
2

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

于 2012-12-04T13:22:17.640 回答
1

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

我带着快照在房子周围转了一圈。我相信他们只是邪恶的。构建可重复性是一个令人头疼的问题,因为将部署到存储库的时间戳快照版本与特定代码提交相关联是很乏味的。

为自己省去麻烦,让您的构建服务器在构建/部署之前在构建服务器上调用 mvn 版本:set -DnewVersion=..${build.number}。使用相同的版本标记您的源代码。如果构建失败,没关系,构建可以配置为刷新工作区,使 pom.xml 文件更改无关紧要。

另一个典型的 Maven 使用快照的“陷阱”是你不确定你的 pom 在构建过程中可能会使用哪些版本的依赖项,所以请确保你的构建调用依赖项:树和依赖项:列表,在你的其他 mvn 构建参数之前. (这将帮助您在传递解析期间识别同一工件的版本不一致 - 我现在发誓我的构建中的 DependencyManagement 部分)。

虽然 Maven 走了很长一段路,但“Maven 方式”并不总是最好的解决方案。对于持续交付的最佳实践来说,它还不够成熟,但你仍然可以有效地使用它,只要你意识到其中的缺陷。

于 2014-03-31T22:45:34.960 回答