如何仅使用 curl 在 Artifactory Repo 子文件夹中搜索

How to search in Artifactory Repo sub folder only using curl

所以我之前有一个脚本可以在我的 Artifactory 存储库中搜索文件夹中的某个 属性。

curl -i -X GET "${ARTIFACTORY_URI}/api/search/prop?my-prop=aaa&repos=my-repo

到目前为止一切顺利。我部署工件的方式是将它们放在子文件夹中,每个子文件夹都分配了 属性 my-prop。然后当我 运行 这个命令时,我得到了满足我的搜索条件的子文件夹列表。这是有效的,因为子文件夹都直接在 repo my-repo 中。

但是现在我们不得不对 Artifactory 进行一些重组。现在,我要列出的子文件夹位于存储库内子文件夹内的子文件夹中。我的命令仍然有效,但它 returns 所有子文件夹。

例如考虑这个:

my-repo:
   * folder1
      + folder1-1
         - folder1-1-1 (my-prop=aaa)
         - folder1-1-2 (my-prop=bbb)
      + folder1-2
         - folder1-2-1 (my-prop=aaa)
   * folder2
      + folder2-1
         - folder2-1-1 (my-prop=aaa)

所以当我使用相同的命令搜索 my-prop=aaa 时,我现在得到的是 folder1-1-1、folder1-2-1 和 folder2-1-1。但是我想做的是将搜索限制在子子文件夹folder1-1。我试图简单地将路径添加到 repos 参数,但它不起作用。

curl -i -X GET "${ARTIFACTORY_URI}/api/search/prop?my-prop=aaa&repos=my-repo/folder1/folder1-1

所以我的问题是如何做到这一点? Artifactory 网站是火车残骸,当然不是很有帮助。我可以使用额外的 folder/path 参数吗?我想指出,我正在使用一个非常受限的客户系统并且无法访问 JFrog CLI 工具,所以我必须使用 curl 和 wget 来做所有事情。

非常感谢任何帮助!!!

你应该可以使用 AQL (Artifactory Query Language)

对于您的示例,使用如下内容:

curl -X POST "${ARTIFACTORY_URI}/api/search/aql" \
     -H 'Content-Type: text/plain' \
     --data 'items.find({"repo":"my-repo","@my-prop":"aaa","path":"folder1","type":"folder"})'

这将在 my-repo 中使用给定的 属性 和确切路径 folder1 搜索 文件夹 。如果路径应该是模式而不是完全匹配,则可以使用其他运算符,例如 $match

有关完整的 AQL 语法和准则,请参阅:Artifactory Query Language