如果您使用 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 解析器。