web-dev-qa-db-ja.com

JFrogArtifactoryのリポジトリにあるすべてのアーティファクトを一覧表示します

Artifactoryは初めてです。現在、リポジトリ内のすべてのアーティファクトを一覧表示するプロジェクトに取り組んでいます。

Artifactoryバージョン:4.1.3Pro(証明書の検証をオフにしました)

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>

エラー(不正なリクエスト)をスローしています。次のリポジトリwar、war-dev、war-release、webapp、webapp-devのアーティファクトをリストしてみてください(Artifactoryデータベースとhttpリクエストからリポジトリのリストを取得してください)。

REST呼び出しを匿名で使用してアーティファクトを一覧表示しようとしましたが、$ARTIFACTORY_HOME/logs/request_trace.log $ARTIFACTORY_HOME/logs/request.logにログがありません

Artdb(Artifactoryデータベース)とアーティファクトURLからリポジトリのリストを取得します。リストされているリポジトリは、それぞれ異なります。どちらが正しいか?

非常に多くのリポジトリをリストしました

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

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

誰かがレポのアーティファクトのリストを見つけるのを手伝ってもらえますか?ありがとうございました!

6
user6136315

AQLがその方法です。そして、クエリはほぼ良いです(warまたはwebで始まるすべてのリポジトリの$matchを忘れました。問題はcurlです。必要に応じてコマンドラインにクエリ文字列を書き込むには、内部の"$をすべてエスケープする必要があります。動作するクエリは次のとおりです。

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)
15
JBaruch

これも私のために働いています。 @JBaruchで指定されたとおりにコマンドを作成するか、JSONAQLファイルを実行することができます。

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

2
user6136315

私にとっては、application/jsonの代わりにContent-Typetext/plainを使用したときに機能しました。つまり、.

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