使用 jfrog CLI 将存储的文件校验和转储到 Artifactory 中
Dumping the stored checksum of a file in Artifactory using jfrog CLI
使用 jfrog CLI (jfrog rt s) 我可以将我的 repo 的文件信息转储到标准输出,但此信息不包含存储的校验和。我看到一个类似的问题
"Artifactory CLI - Jfrog - How to get binary Hash code (SHA1, SHA256) through jfrog CLI" 但答案只是关于搜索特定的校验和。完全不熟悉 jfrog,有人可以建议一个简单的方法(请使用 jfrog)来转储 repo 中所有文件或特定文件的校验和信息吗?
从 JFrog CLI 1.36.0 版本开始,搜索命令还 returns 文件的 SHA1 和 MD5。例如:
$ jfrog rt s repo/path/file
如果您使用 jfrog-cli 版本 1.36.0 或更高版本、Artifactory 服务器 5.5 或更高版本以及 correctly configured database,jfrog rt search
命令理论上支持 returning sha256 和.
在幕后,jfrog rt search
命令利用 AQL 生成发送到服务器的查询。默认查询执行 items.find().include(*),其中 return 包含所有受支持的字段。我想如果数据库设置不正确,则不支持 SHA-256 和(我的工作场所似乎就是这种情况)。
幸运的是,有一个替代方案甚至可以在旧版本的 jfrog-cli 上运行(我已经用 1.26.2 测试过)。这涉及使用 jfrog rt curl
命令直接从服务器获取元数据。请注意 jfrog rt curl
命令不支持标准 --url
--access-token
或 --apikey
参数,因此您需要使用 [=19= 配置与服务器的连接] 首先(如果要自动执行此操作,请不要忘记使用 --interactive=false
)。完成后,您正在寻找的魔法咒语是:
jfrog rt curl -XGET "api/storage/your_repo/your_file"
这将 return 一个 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 中提取 returned 校验和,请尝试我在 bash 中拼凑的这个丑陋的 hack(注意如果你先折叠空格,这将不起作用):
#!/bin/bash
...
checksums=($(sed -n -E "s/^\s+\\"sha256\\"\s:\s\\"(.*)\\"$/\1/p" <<< "$response"))
checksum="${checksums[0]}"
original_checksum="${checksums[1]}"
如果您可以选择,我建议您改用更强大的 json 解析器。
使用 jfrog CLI (jfrog rt s) 我可以将我的 repo 的文件信息转储到标准输出,但此信息不包含存储的校验和。我看到一个类似的问题 "Artifactory CLI - Jfrog - How to get binary Hash code (SHA1, SHA256) through jfrog CLI" 但答案只是关于搜索特定的校验和。完全不熟悉 jfrog,有人可以建议一个简单的方法(请使用 jfrog)来转储 repo 中所有文件或特定文件的校验和信息吗?
从 JFrog CLI 1.36.0 版本开始,搜索命令还 returns 文件的 SHA1 和 MD5。例如:
$ jfrog rt s repo/path/file
如果您使用 jfrog-cli 版本 1.36.0 或更高版本、Artifactory 服务器 5.5 或更高版本以及 correctly configured database,jfrog rt search
命令理论上支持 returning sha256 和.
在幕后,jfrog rt search
命令利用 AQL 生成发送到服务器的查询。默认查询执行 items.find().include(*),其中 return 包含所有受支持的字段。我想如果数据库设置不正确,则不支持 SHA-256 和(我的工作场所似乎就是这种情况)。
幸运的是,有一个替代方案甚至可以在旧版本的 jfrog-cli 上运行(我已经用 1.26.2 测试过)。这涉及使用 jfrog rt curl
命令直接从服务器获取元数据。请注意 jfrog rt curl
命令不支持标准 --url
--access-token
或 --apikey
参数,因此您需要使用 [=19= 配置与服务器的连接] 首先(如果要自动执行此操作,请不要忘记使用 --interactive=false
)。完成后,您正在寻找的魔法咒语是:
jfrog rt curl -XGET "api/storage/your_repo/your_file"
这将 return 一个 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 中提取 returned 校验和,请尝试我在 bash 中拼凑的这个丑陋的 hack(注意如果你先折叠空格,这将不起作用):
#!/bin/bash
...
checksums=($(sed -n -E "s/^\s+\\"sha256\\"\s:\s\\"(.*)\\"$/\1/p" <<< "$response"))
checksum="${checksums[0]}"
original_checksum="${checksums[1]}"
如果您可以选择,我建议您改用更强大的 json 解析器。