列出 JFrog Artifactory 上存储库中的所有工件

list all artifacts in a repository on JFrog Artifactory

我是 Artifactory 的新手。目前我正在做一个项目来列出存储库中的所有工件。

Artifactory version:4.1.3 Pro(关闭证书验证)

curl -u uname:password -X POST -k https://artifactory.xxxx.com/artifactory/api/search/aql -d "items.find({"repo":"war"}).include("name","repo","path","size").sort({"$desc":["size"]}).limit(10)"


<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /artifactory/api/search/aql was not found on this server.</p>
<hr>
<address>Apache/2.2.31 (Amazon) Server at artifactory.xxxx.com Port 443</address>
</body></html>

它抛出一个错误(错误的请求)。尝试列出以下 repos war,war-dev,war-release,webapp,webapp-dev 中的工件(从 Artifactory 数据库和 http 请求中获取 repos 列表) .

尝试匿名使用 REST 调用列出工件,但 $ARTIFACTORY_HOME/logs/request_trace.log $ARTIFACTORY_HOME/logs/request.log

中没有日志

从 artdb(Artifactory 数据库)和 artifactory url 获取 repos 列表。列出的回购协议各不相同。哪一个是正确的?

列出了这么多回购

mysql> select distinct(repo) from nodes;
| war                               |
| war-dev                           |
| war-release                       |

https://artifactory.xxxx.com/artifactory/repo/
webapp/                                                       
webapp-dev/                                                    

有人可以帮忙找出 repo 中的工件列表吗?谢谢!

AQL 是必经之路。你的查询是 almost 好(你忘记了所有以 warweb 开头的回购的 $match。问题是卷曲。如果你想要在命令行中写入查询字符串,您需要转义所有内部 "$。这是工作查询:

curl -u uname:password -X POST -k https://artifactory.xxxx.com/artifactory/api/search/aql -d "items.find({\"type\" : \"file\",\"$or\":[{\"repo\" : {\"$match\" : \"war*\"}, \"repo\" : {\"$match\" : \"web*\"} }]}).include(\"name\",\"repo\",\"path\",\"size\").sort({\"$desc\": [\"size\"]}).limit(10)"

现在,这就是地狱。相反,考虑将查询写入文本文件并使用 -d @filename.aql 传递。在这种情况下,您不需要所有转义,查询将如下所示:

items.find({
  "type" : "file",
  "$or":[{
    "repo" : {"$match" : "war*"}, 
    "repo" : {"$match" : "web*"} }]})
  .include("name","repo","path","size")
  .sort({"$desc": ["size"]})
  .limit(10)

这对我也有效。您可以按照@JBaruch 指定的方式编写命令,也可以运行 JSON AQL 文件。

curl -u uname -X POST http://host:8081/artifactory/api/search/aql -H "content-type: application/json" -d @filename.aql

对我来说,当我使用 Content-Type text/plain 而不是 application/json 时它起作用了,即

curl -u uname -X POST http://host:8081/artifactory/api/search/aql -H "content-type: text/plain" -d @filename.aql