有没有办法使用AQL下载工件?
我发送了一个查询:
curl -u user:pass \
-X POST https://artifactoryURL/artifactory/api/search/aql \
-H 'content-type: text/plain' \
-T query.aql
我的query.aql
:
items.find(
{
"repo":{"$eq":"repo"},
"$and": [
{
"path": { "$match": "path/*"},
"name": { "$match": "*.rpm"}
}
]
}
)
.sort({ "$desc": ["modified"] })
.limit(1)
现在我知道它会返回我想要的内容,是否有办法将请求从api/search/aql
更改为api/download/aql
并获取这些项目?
修改
我还尝试使用 jfrog cli 执行此操作,但他们并不完全支持AQL(排序和限制无效)。
这是我试过的命令:
jfrog rt s --spec=query-aql.json
未能排序和限制结果的规范:
{
"files": [
{
"aql": {
"items.find": {
"repo": "repo",
"$and": [
{
"path": { "$match": "path/*"},
"name": { "$match": "*.rpm"}
}
]
}
},
"sort": {
"$asc": ["modified"]
},
"limit": 1
}
]
}
编辑2:
添加了jfrog-cli-go问题:https://github.com/JFrogDev/jfrog-cli-go/issues/56
答案 0 :(得分:2)
使用aql脚本从artifactory下载文件的简单方法是在这里使用JFrog cli:https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-Download,CopyandMoveCommandsSpecSchema
cli可以作为linux,mac或windows的可执行文件下载,并且应该符合您的需求
使用curl命令,你唯一能做的就是从你的aql查询中解析结果并为每个文件执行下载请求。
答案 1 :(得分:2)
我只是在寻找一个非常相似的东西 - 使用下载规范文件从给定的repo和路径下载最新的工件。如果我使用AQL,我不在乎,我只想在download-spec.json
文件中使用它。如果您转到上面的link,请查看示例5 。
为您的示例修改:
{
"files": [
{
"pattern": "path/*.rpm",
"target": "my/download/path/",
"sortBy": "created",
"sortOrder": "desc",
"limit": 1,
}
]
}
答案 2 :(得分:0)
jfrog cli支持--limit
,--sort-order
和--sort-by
个参数。
以下适用于我:
jfrog rt search --spec=/tmp/jfrogfilespec.json --sort-by created --sort-order=desc --limit 1
json spec文件的内容是:
{ "files": [ { "aql": { "items.find": { "repo":{"$eq":"my-release-repo"}, "name":{"$match":"my-artifact-prefix*"} } } } ] }
这将生成以下查询(根据调试模式):
items.find( { "repo":{"$eq":"my-release-repo"}, "name":{"$match":"my-artifact-prefix*"} } ).include("name","repo","path","actual_md5","actual_sha1","size","type","created").sort({"$desc":["created"]}).limit(1)
令人沮丧的是,我似乎无法找到一种方法来使用" jfrog rt search"使用filespec可以影响"包含"搜索的修饰部分。