【问题标题】:Artifactory AQL download artifactArtifactory AQL 下载神器
【发布时间】:2017-05-19 19:20:51
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    使用您的 aql 脚本从 artifactory 下载文件的一种简单方法是使用此处提到的 JFrog cli:https://www.jfrog.com/confluence/display/CLI/CLI+for+JFrog+Artifactory#CLIforJFrogArtifactory-Download,CopyandMoveCommandsSpecSchema

    cli 可以下载为适用于 linux、mac 或 windows 的可执行文件,应该满足您的需求

    使用 curl 命令,您唯一能做的就是解析 aql 查询的结果并对每个文件执行下载请求。

    【讨论】:

    • jfrog cli 无法对我的结果进行排序和限制(请参阅编辑)。这里的主要痛苦是,对于非常简单的事情,我必须使用高级语言来解析返回的 json,而 AQL 应该只允许我将结果缩小到一个并得到它。
    【解决方案2】:

    我只是在寻找一个非常相似的东西——使用下载规范文件从给定的 repo 和路径下载最新的工件。我不在乎是否使用 AQL,我只希望它在 download-spec.json 文件中。如果您转到上面的link,请查看示例 5。

    为您的示例修改:

    {
      "files": [
      {
        "pattern": "path/*.rpm",
        "target": "my/download/path/",
        "sortBy": "created",
        "sortOrder": "desc",
        "limit": 1,
      }
      ]
    }
    

    【讨论】:

      【解决方案3】:

      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”与允许我影响搜索的“include”修饰符部分的文件规范一起使用的方法。

      【讨论】:

      • 请在发布前查看您在预览部分的帖子,并检查一切是否正常。如您所见,您的代码不正确marked as code。另请阅读Help Center 中的this article,了解如何写出好的答案。更好的答案会让你获得更多的支持,并有更高的被接受的机会。
      猜你喜欢
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-11
      相关资源
      最近更新 更多