我在使用 JFrog CLI 递归地从 Artifactory 中提取文件夹时遇到问题

I am having an issue recursively pulling a folder from Artifactory using JFrog CLI

我正在使用 Artifactory 服务器。我正在尝试在我的存储库中存储第三方文件的文件夹。

我能够上传一个 zip 文件并将其分解,所以我的文件在 MY_REPO/MY_FOLDER/

我正在尝试使用递归方式下载文件夹的内容:

jfrog rt dl --recursive MY_REPO/MY_FOLDER

我启用了调试并得到:

    [Info] Searching items to download...
    [Debug] Searching Artifactory using AQL query:
     items.find({"repo": "MY_REPO","path": {"$ne": "."},"$or": [{"$and":[{"path": {"$match": "MY_FOLDER"},"name": {"$match": "*"}}]},{"$and":[{"path": {"$match": "MY_FOLDER/*"},"name": {"$match": "*"}}]}]}).include("name","repo","path","actual_md5","actual_sha1","size","type","property")
    [Error] Artifactory response: 405 Method Not Allowed

    {
      "status": "failure",
      "totals": {
        "success": 0,
        "failure": 0
      }
    }
    [Error] Download finished with errors. Please review the logs

我尝试了 MY_FOLDERMY_FOLDER/[= 的变体74=]/.和with/without递归。我犯了同样的错误。

我知道我有权限,因为我可以上传文件:

jfrog rt u TEST_FILE MY_FOLDER

成功就好了。但是我不能转身把它拉下来:

jfrog rt dl MY_FOLDER/TEST_FILE

结果:

    [Info] Searching items to download...
    [Debug] Searching Artifactory using AQL query:
     items.find({"repo": "MY_REPO","$or": [{"$and":[{"path": {"$match": "."},"name": {"$match": "MY_FILE"}}]}]}).include("name","repo","path","actual_md5","actual_sha1","size","type","property")
    [Error] Artifactory response: 405 Method Not Allowed

    {
      "status": "failure",
      "totals": {
        "success": 0,
        "failure": 0
      }
    }
    [Error] Download finished with errors. Please review the logs

我不确定什么不起作用,Whosebug、JFrog dox 或其他地方都没有关于使用 jfrog cli 的问题。 :(

我的 jfrog-cli.conf 看起来像这样:

        {
          "artifactory": [
            {
              "url": "https://SITE_NAME:PORT_NUM/artifactory/list/MY_REPO/",
              "user": "USERNAME",
              "serverId": "MY_REPO",
              "isDefault": true,
              "apiKey": "API_KEY_FROM_ARTIFACTORY"
            }
          ],
          "Version": "1"
        }

已更新 我是 运行 64 位 Windows 版本 1.22.1。我现在在 Windows 64 位上使用 jfrog cli 版本 1.34.1。根据第一条评论,我更新到最新的二进制文件并尝试 运行 搜索,有和没有 MY_FOLDER:

jfrog rt s TEST_FILEjfrog rt s MY_FOLDER/TEST_FILE

两者return相同的结果。我启用了 DEBUG 并且使用较新的二进制文件我实际上似乎得到 two 错误。较旧的二进制文件只报告了 405 错误。较新的报告 404(未找到),然后将错误报告为 405 方法不允许。

[Debug] Sending usage info...
[Info] Searching artifacts...
[Debug] Searching Artifactory using AQL query:
 items.find({"$or":[{"$and":[{"repo":"TEST_FILE","path":{"$match":"*"},"name":{"$match":"*"}}]}]}).include("name","repo","path","actual_md5","actual_sha1","size","type","modified","created","property")
[Debug] Sending HTTP POST request to: https://SITE_NAME:8443/artifactory/list/MY_REPO/api/search/aql
[Debug] Sending HTTP GET request to: https://SITE_NAME:8443/artifactory/list/MY_REPO/api/system/version
[Debug] Artifactory response: 404 Not Found
{
  "errors": [
    {
      "status": 404,
      "message": "File not found."
    }
  ]
}
[Error] Artifactory response: 405 Method Not Allowed

这仍然很奇怪,因为我正在寻找我刚刚上传的文件。我什至删除了上传的文件并重新上传以验证较新的 cli 仍然可以上传文件。我尝试使用通配符搜索来查找所有文件,但它 returned 出现了同样的错误。

我还可以使用 Artifactory Web 界面看到文件应该在的位置,然后下载文件并将其删除。所以 Artifactory 知道它在那里并且我可以访问它。 :-/

您配置中的url应该只包含Artifactory的基础url,即:"SITE_NAME:PORT_NUM/artifactory"

您应该在上传和下载命令中提供目录路径。

使用 ping 命令验证您的设置是否有效,然后继续进行。

顺便说一句:上传成功但下载失败的原因是巧合。上传命令仅使用上传 REST API 需要路径(您在配置中提供),但下载命令首先发送不需要路径的搜索请求,因此失败。