Artifactory AQL下载工件

时间:2017-05-19 19:20:51

标签: artifactory artifactory-query-lang jfrog-cli

有没有办法使用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

3 个答案:

答案 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可以影响"包含"搜索的修饰部分。