Artifactory aql:使用给定 属性 查找工作构建
Artifactory aql: find builds of job with given property
我正在尝试查询哪个内部版本号从构建 foo
中生成了工件 属性 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
query.json:
builds.find(
{
"module.artifact.item.repo":"snapshot-local",
"name":"foo",
"module.artifact.item.@vcs.Revision":"aabbccddee123456"
}
)
但是,这 3 行中 none 似乎单独正确:
builds.find({"module.artifact.item.repo":"snapshot-local"})
returns没什么,
builds.find({"name":"foo"})
returns同样的空响应,
builds.find({"module.artifact.item.@vcs.Revision":"aabbccddee123456"})
还有 returns 这个:
{
"results" : [ ],
"range" : {
"start_pos" : 0,
"end_pos" : 0,
"total" : 0
}
}
我在这里做错了什么?我确实在 webapp 中看到了我使用这个名称发布的构建,并且具有正确的工件属性。
某些 AQL 查询需要具有管理员权限的用户。
为确保非特权用户无法在没有正确权限的情况下访问信息,用户 without admin privileges 具有以下限制:
- 查询中的主域名只能是item.
- include 指令中必须包含以下三个字段:name、repo、path.
在您的情况下,您在需要管理员权限的查询中使用构建域
这是一个可以提供内部版本号的可行解决方案(因为授予管理员查询内部版本的权限对我们来说不是一个解决方案):
query.json
:
items.find(
{
"repo":"snapshot-local",
"artifact.module.build.name":"foo",
"artifact.item.@vcs.Revision":"aabbccddee123456"
}
).include("artifact.module.build.number")
此 returns 所有使用相关属性构建的工件的列表,并附有构建号,例如:
{
"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
。
我正在尝试查询哪个内部版本号从构建 foo
中生成了工件 属性 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
query.json:
builds.find(
{
"module.artifact.item.repo":"snapshot-local",
"name":"foo",
"module.artifact.item.@vcs.Revision":"aabbccddee123456"
}
)
但是,这 3 行中 none 似乎单独正确:
builds.find({"module.artifact.item.repo":"snapshot-local"})
returns没什么,builds.find({"name":"foo"})
returns同样的空响应,builds.find({"module.artifact.item.@vcs.Revision":"aabbccddee123456"})
还有 returns 这个:
{
"results" : [ ],
"range" : {
"start_pos" : 0,
"end_pos" : 0,
"total" : 0
}
}
我在这里做错了什么?我确实在 webapp 中看到了我使用这个名称发布的构建,并且具有正确的工件属性。
某些 AQL 查询需要具有管理员权限的用户。 为确保非特权用户无法在没有正确权限的情况下访问信息,用户 without admin privileges 具有以下限制:
- 查询中的主域名只能是item.
- include 指令中必须包含以下三个字段:name、repo、path.
在您的情况下,您在需要管理员权限的查询中使用构建域
这是一个可以提供内部版本号的可行解决方案(因为授予管理员查询内部版本的权限对我们来说不是一个解决方案):
query.json
:
items.find(
{
"repo":"snapshot-local",
"artifact.module.build.name":"foo",
"artifact.item.@vcs.Revision":"aabbccddee123456"
}
).include("artifact.module.build.number")
此 returns 所有使用相关属性构建的工件的列表,并附有构建号,例如:
{
"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
。