如何更新工件构建模块 ID

Posted

技术标签:

【中文标题】如何更新工件构建模块 ID【英文标题】:How to update Artifact Build Module ID 【发布时间】:2017-10-10 11:54:49 【问题描述】:

我正在使用 Jenkins CI(单管道作业)将不同的文件推送到 JFrog Artifactory。

对于每个构建,我都会将构建信息发布到 Artifactory。但是每个构建都有相同的模块 ID。

例如:在 Artifactory Repository Browser 中选择任何工件,然后转到 Build 选项卡,然后它会显示所有构建而不是相应的工件构建信息

所以我想知道如何在将工件信息发布到 Artifactory 的同时修改 Artifact Module ID

【问题讨论】:

将工件上传到 Artifactory 后,我们将获得构建信息对象。稍后我们会将构建信息发布到 Artifactory。在这两个步骤之间,我尝试更新构建信息对象。 你如何上传,mvn?毕业? 我正在压缩一些文件并上传该压缩文件 【参考方案1】:

构建信息和工件存储采用不同的机制。构建信息仅与工件相关联,因为您可以定义从构建中生成哪些工件以及哪些工件是构建的依赖项。模块 ID 与构建信息没有关联。模块 ID 由存储工件的存储库布局定义。请参阅此处的 jfrog 文档:https://www.jfrog.com/confluence/display/RTF/Repository+Layouts

您无法更改模块 ID。 Artifactory 根据存储库布局分配模块 ID。这意味着工件的路径对于定义模块 ID 很重要。 例如存储库布局

[org]/[module]/[module]_[base_rev].[ext] 将为按照 [org]:[module]:[base_rev] 模式存储的任何工件提供模块 ID。

工件通过工件上的 build.name、build.number 属性和从 .json 文件发布构建信息与构建相关联。 .json 必须包含一个部分,表示从构建中生成了哪些工件。

一般来说,听起来您需要确保将每个工件部署到工件中的唯一路径,并设置 build.name 和 build.number 属性。要查看的另一件事是文件哈希。它必须与正在发布的构建信息相匹配。因此,如果文件哈希没有不同,则意味着与之前的构建相比,工件没有变化。

我不知道这会有多大帮助,但是在获取工件和构建时有很多细微差别。您提到使用 Jenkins,您是否考虑过使用 Jenkins Artifactory 插件。虽然我们使用 Bamboo,但它应该会为您处理很多这项工作,所以我不太熟悉它的不同之处。

【讨论】:

您提到的模块 ID 由存储库布局定义。好像不是真的。因为我在里面使用 Maven 存储库,所以我有两个不同的文件夹,一个用于 Java 工件,另一个用于通用文件。我为每个 java 工件获得了不同的模块 ID,但对于同一存储库中的常规文件却没有。

以上是关于如何更新工件构建模块 ID的主要内容,如果未能解决你的问题,请参考以下文章

Gradle 5 Kotlin DSL:多模块项目中的常见任务和 Maven 工件

如何解决模块 X 的多个工件被检索到 Apache Ivy 中的同一个文件?

如何将 Jenkins 中的特定工件部署到 Nexus 中?

在 IntelliJ IDEA 中将外部库添加到工件 jar

构建简单 cgo 模块的问题

重定向linux模块构建的输出