首页 > 解决方案 > 如何让 Artifactory 使用最新的(而不是最旧的)快照工件?

问题描述

我正在使用 jennkins 管道、maven 和 artifactory 来构建产品 MyProduct。

插件 A 使用以下 Artifactory Snapshot Repository。

<distributionManagement>
    <snapshotRepository>
        <id>mvn</id>
        <url>https://bin.mydomain.ch/artifactory/myproduct-repo.mvn/</url>
        <uniqueVersion>false</uniqueVersion>
    </snapshotRepository>
</distributionManagement>

插件 A 构建没有问题,并且似乎上传到 Company Repo 和 MyProduct Repo。

在构建过程中的某个地方出了点问题,两个存储库没有同步,Company Repo 中有一个额外的工件,“*-110.jar & *.110.pm”。

Company Repo
Index of mvn/ch/sbb/myproduct/cloud/myproduct-common/2.2.2-SNAPSHOT

maven-metadata.xml                               21-Nov-2018 01:13  781 bytes
myproduct-common-2.2.2-20181116.162503-110.jar   16-Nov-2018 16:25  83.55 KB
myproduct-common-2.2.2-20181116.162503-110.pom   16-Nov-2018 16:25  2.97 KB
myproduct-common-2.2.2-20181120.235538-34.jar    20-Nov-2018 23:55  85.76 KB
myproduct-common-2.2.2-20181120.235538-34.pom    20-Nov-2018 23:55  3.44 KB
myproduct-common-2.2.2-20181121.002820-35.jar    21-Nov-2018 00:28  85.76 KB
myproduct-common-2.2.2-20181121.002820-35.pom    21-Nov-2018 00:28  3.44 KB
myproduct-common-2.2.2-20181121.011343-36.jar    21-Nov-2018 01:13  85.76 KB
myproduct-common-2.2.2-20181121.011343-36.pom    21-Nov-2018 01:13  3.44 KB

MyProduct Repo  
Index of myproduct-repo.mvn/ch/sbb/myproduct/cloud/myproduct-common/2.2.2-SNAPSHOT

maven-metadata.xml                              21-Nov-2018 01:13  781 bytes
myproduct-common-2.2.2-20181120.235538-34.jar   20-Nov-2018 23:55  85.76 KB
myproduct-common-2.2.2-20181120.235538-34.pom   20-Nov-2018 23:55  3.44 KB
myproduct-common-2.2.2-20181121.002820-35.jar   21-Nov-2018 00:28  85.76 KB
myproduct-common-2.2.2-20181121.002820-35.pom   21-Nov-2018 00:28  3.44 KB
myproduct-common-2.2.2-20181121.011343-36.jar   21-Nov-2018 01:13  85.76 KB
myproduct-common-2.2.2-20181121.011343-36.pom   21-Nov-2018 01:13  3.44 KB

当我构建插件 B 时,它会从 Company Repo 中获取依赖项,并且由于某些原因,它会获取最旧的 110 快照,并且出现编译错误。Company Repo maven-metadata.xml 指向工件 110,而 maven-metadata.xml MyProduct Repo 指向工件 37(最新和最好的)。

我如何告诉插件 B 使用 MyProduct Repo,或者至少获取最新的 SNAPSHOT 工件?

是否有任何 jenkins 管道魔术可以用来模拟 false,换句话说,没有时间戳推送到存储库(也可以拉取它们)?

如何在公司回购中重新创建 maven-metadata.xml?

标签: mavenjenkins-pipelineartifactory

解决方案


我如何告诉插件 B 使用 MyProduct Repo,或者至少获取最新的 SNAPSHOT 工件?

<distributionManagement>
    <snapshotRepository>
        <id>mvn</id>
        <url>https://bin.mydomain.ch/artifactory/myproduct-repo.mvn/</url>
        <uniqueVersion>false</uniqueVersion>
        <updatePolicy>always</updatePolicy>
    </snapshotRepository>
</distributionManagement>

添加updatePolicy并将其值设置为“始终”。这将始终从指定的 URL 中提取最新版本的依赖项。

设置uniqueVersion为 false 完全是另一个主题(违反 Semver)。

是否有任何 Jenkins 管道魔法可以用来模拟 false,换句话说,在没有时间戳的情况下推送到存储库(并拉取它们)?

我永远不会建议在 Artifactory 中取消时间戳。出于多种原因,该信息很有价值。我知道您只是在寻找解决问题的方法,但通过删除时间戳,您实际上是在开放性伤口上贴上创可贴。

如何在公司回购中重新创建 maven-metadata.xml?

不知道你在这里的意思。这是自动更新的。你不应该强迫 Maven 对这个文件做任何事情。


推荐阅读