4

我正在尝试foo使用 artifact property从 build 中查询哪个 build number(s) 生成的工件vcs.Revision=aabbccddee123456

在 Artifactory 5.1.3 中。

到目前为止,我一直在尝试这样:

curl -u user:apikey -i -X POST https://artifactory.foobar.com/artifactory/api/search/aql -H "content-type:text/plain" -T query.json

查询.json:

builds.find(
{
  "module.artifact.item.repo":"snapshot-local",
  "name":"foo",
  "module.artifact.item.@vcs.Revision":"aabbccddee123456"
}
)

但是,这 3 行似乎都不正确:

  • builds.find({"module.artifact.item.repo":"snapshot-local"}) 什么都不返回,

  • builds.find({"name":"foo"}) 返回相同的空响应,

  • builds.find({"module.artifact.item.@vcs.Revision":"aabbccddee123456"})也返回这个:

{ "results" : [ ], "range" : { "start_pos" : 0, "end_pos" : 0, "total" : 0 } }

我在这里做错了什么?我确实在 webapp 中看到了我使用此名称发布的构建,并且具有正确的工件属性。

4

2 回答 2

5

这是一个可以提供内部版本号的有效解决方案(因为授予管理员权限来查询内部版本不是我们的解决方案):

query.json

items.find(
{
  "repo":"snapshot-local",
  "artifact.module.build.name":"foo",
  "artifact.item.@vcs.Revision":"aabbccddee123456"
}
).include("artifact.module.build.number")

这将返回使用相关属性构建的所有工件的列表,并附加构建号,例如:

{
"results" : [ {
  "repo" : "snapshot-local",
  "path" : "foo/42",
  "name" : "a.out",
  "type" : "file",
  "size" : 123456789,
  "created" : "2018-07-05T12:34:56.789+09:00",
  "created_by" : "jenkins",
  "modified" : "2018-07-05T12:34:56.789+09:00",
  "modified_by" : "jenkins",
  "updated" : "2018-07-05T12:34:56.789+09:00",
  "artifacts" : [ {
    "modules" : [ {
      "builds" : [ {
        "build.number" : "42"
      } ]
    } ]
  } ]
},
[SNIP]
}
 ],
"range" : {
  "start_pos" : 0,
  "end_pos" : 30,
  "total" : 30
}
}

然后我可以解析它以提取build.number.

于 2018-07-05T13:52:55.550 回答
1

某些 AQL 查询需要具有管理员权限的用户。为确保非特权用户在没有正确权限的情况下无法访问信息,没有管理员权限的用户具有以下限制:

  1. 查询中的主域只能是item
  2. include 指令中必须包含以下三个字段:namerepopath

在您的情况下,您在需要管理员权限的查询中使用构建域

于 2018-07-05T12:16:00.763 回答