Artifactory REST API:如何将构建与已部署的工件重新关联?

Dav*_*vid 2 rest artifacts artifactory jenkins

在现有工件上将工件部署到Artifactory时,它不会将其与现有工件具有的构建关联.

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

example.jar
example.pom
example.json
Run Code Online (Sandbox Code Playgroud)

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

假设使用buildName"example-build"和buildNumber 51将其部署到/libs-release-local/example/1.0/

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

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

PUT /libs-release-local/example/1.0/example.json
Run Code Online (Sandbox Code Playgroud)

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

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

无法执行此操作会导致各种问题(例如,当build_promotion完成时,它仅提升先前关联的工件,而不会提升以后部署的任何工件.)

noa*_*amt 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"
        }, 
        ....
    }
}
Run Code Online (Sandbox Code Playgroud)

Build Info描述符描述了"构建",其本质上是模块按一定方法生产/ s的单个单元; 这个过程取决于特定的环境.

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

您基本上会损害"构建"单元的完整性.

"正确"的方法是启动一个新的构建过程并生成一个有效的Build Info描述符.