【问题标题】:Jenkins maven deploy jar to nexus - artifact namingJenkins maven 将 jar 部署到 nexus - 工件命名
【发布时间】:2012-05-19 00:08:45
【问题描述】:

我的名为“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. jenkins怎么上传testproject-0.1-20120509.161644-74.jar到Nexus? 20120509.161644-74 的东西是从哪里来的?

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

【问题讨论】:

    标签: maven jenkins nexus


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        maven deploy plugin page 表示“默认情况下,当工件的快照版本部署到存储库时,会为其添加时间戳”。所以,它是在你调用mvn deploy时由插件创建的。

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

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

        【讨论】:

        猜你喜欢
        • 2016-10-19
        • 2016-06-28
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-07
        • 1970-01-01
        相关资源
        最近更新 更多