2

当您通过现有工件将工件部署到 Artifactory 时,它不会将其与现有工件所具有的构建相关联。

例如:如果您使用 Jenkins Artifactory 插件部署了三个工件:

example.jar
example.pom
example.json

然后它将创建一个新构建,将这些工件与该构建相关联,并将工件部署到您指定的位置和存储库。

假设这部署到 /libs-release-local/example/1.0/ 并带有 buildName "example-build" 和 buildNumber 51

如果您查看了工件,您将在构建选项卡上看到它与 build-info.json 相关联。

现在,假设您使用 REST API 将 example.json 部署到同一位置:

PUT /libs-release-local/example/1.0/example.json

现在新工件与 build-info.json 无关!

如何部署工件以使其与已经存在的 build-info.json 相关联?(在本例中,“/example-build/51”构建)。

无法做到这一点会导致各种问题(例如,当 build_promotion 完成时,它只会提升先前关联的工件,而不是稍后部署的任何东西。)

4

1 回答 1

8

Artifactory根据它们的校验和Build Info将描述符与构建工件工件相关联。

如果您查看作为Build Info描述符的 JSON,您将能够看到:

{
    ...
    "modules" : [ {
        "id" : "org._10ne.gradle:rest-gradle-plugin:0.2.0",
        "artifacts" : [ {
          "type" : "pom",
          "sha1" : "f0dcec6a603aa99f31990e20c0f314749f0e22ca",
          "md5" : "427dcf49c07cc7be175ea31fd92da44e",
          "name" : "rest-gradle-plugin-0.2.0.pom"
        }, 
        ....
    }
}

描述符Build Info描述了“构建”,它本质上是由某个进程生成的单个模块单元;这个过程取决于特定的环境。

您正在部署一个不属于描述的原始流程或环境的新工件Build Info;如果是这样,它将使用与前一个工件完全相同的校验和生成

您基本上是在损害“构建”单元的完整性

这样做的“正确”方法是开始一个新的构建过程并产生一个有效的Build Info描述符。

于 2013-04-30T07:12:31.683 回答