【问题标题】:Dumping the stored checksum of a file in Artifactory using jfrog CLI使用 jfrog CLI 在 Artifactory 中转储文件的存储校验和
【发布时间】:2020-07-23 08:29:42
【问题描述】:

使用 jfrog CLI (jfrog rt s) 我可以将我的 repo 的文件信息转储到 stdout,但此信息不包含存储的校验和。我看到一个类似的问题 “Artifactory CLI - Jfrog - How to get binary Hash code (SHA1, SHA256) through jfrog CLI”但答案只是关于搜索特定校验和。对 jfrog 不太熟悉,有人可以建议一种简单的方法(请务必使用 jfrog)来转储 repo 中所有或特定文件的校验和信息吗?

【问题讨论】:

    标签: artifactory


    【解决方案1】:

    从 JFrog CLI 1.36.0 版开始,搜索命令还返回文件的 SHA1 和 MD5。例如:

    $ jfrog rt s repo/path/file
    

    【讨论】:

      【解决方案2】:

      如果您使用 jfrog-cli 1.36.0 或更高版本、Artifactory 服务器 5.5 或更高版本以及correctly configured database,则jfrog rt search 命令理论上支持返回 sha256 总和。

      在后台,jfrog rt search 命令利用AQL 生成发送到服务器的查询。默认查询执行 items.find().include(*),它返回所有支持的字段。我猜如果没有正确设置数据库,那么不支持 SHA-256 总和(我的工作场所似乎就是这种情况)。

      幸运的是,有一个替代方案甚至可以在旧版本的 jfrog-cli 上工作(我已经用 1.26.2 测试过)。这涉及使用jfrog rt curl 命令直接从服务器获取元数据。请注意,jfrog rt curl 命令不支持标准的--url --access-token--apikey 参数,因此您需要先使用jfrog rt c 配置与服务器的连接(不要忘记使用@ 987654331@ 如果您要自动执行此操作)。完成此操作后,您正在寻找的魔法咒语是:

      jfrog rt curl -XGET "api/storage/your_repo/your_file"

      这将返回一个 JSON blob,如下所示:

      '{
        "repo" : "your_repo",
        "path" : "/your_path/your_file",
        "created" : "2020-07-21T21:28:20.663Z",
        "createdBy" : "token:your-token",
        "lastModified" : "2020-07-21T21:28:27.277Z",
        "modifiedBy" : "token:your-token",
        "lastUpdated" : "2020-07-21T21:28:27.287Z",
        "downloadUri" : "https://your_artifactory_url/artifactory/your_repo/your_path/your_file",
        "mimeType" : "application/x-gzip",
        "size" : "1198168",
        "checksums" : {
          "sha1" : "5e288fe94da1fed0b4ce6695c7a984426e9f5a78",
          "md5" : "a012711241ba3a5bd4a04e833001d490",
          "sha256" : "d22e76b6cc0b4e2e29076d08f8209dec2b7d9c28e71a13d989175a1272ac3da7"
        },
        "originalChecksums" : {
          "sha1" : "5e288fe94da1fed0b4ce6695c7a984426e9f5a78",
          "md5" : "a012711241ba3a5bd4a04e833001d490",
          "sha256" : "d22e76b6cc0b4e2e29076d08f8209dec2b7d9c28e71a13d989175a1272ac3da7"
        },
        "uri" : "https://your_artifactory_url/artifactory/api/storage/your_repo/your_path/your_file"
      }'
      

      originalChecksums 来自于首次上传工件时。如果工件在服务器上被篡改,那么常规的checksums 可能会有所不同。出于这个原因,我建议您针对 originalChecksums 进行验证,除非您在预期会覆盖相同工件的环境中操作。

      如果您正在寻找一种快速而肮脏的方法来从 JSON blob 中提取返回的校验和,那么请尝试我在 bash 中拼凑的这个丑陋的 hack(请注意,如果您先折叠空格,这将不起作用):

      #!/bin/bash
      ...
      checksums=($(sed -n -E "s/^\\s+\\\"sha256\\\"\\s:\\s\\\"(.*)\\\"\$/\\1/p" <<< "$response"))
      checksum="${checksums[0]}"
      original_checksum="${checksums[1]}"
      

      如果您可以选择,我建议您改用更强大的 json 解析器。

      【讨论】:

        猜你喜欢
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 2017-06-05
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多