如何通过JFrog CLI获取Artifactory二进制哈希值或按哈希下载
一、如何获取Artifactory工件的SHA1/SHA256哈希值
你可以通过两种简单方式获取工件的哈希元数据:
1. 使用jfrog rt stat命令(推荐,直接返回详细信息)
这个命令会直接输出指定工件的完整元数据,包括SHA1、SHA256等哈希值,语法如下:
jfrog rt stat afrepo/test_repo/test.txt --server-id af-server.com
执行后会得到类似这样的输出(包含核心哈希字段):
{
"repo": "afrepo",
"path": "/test_repo/test.txt",
"name": "test.txt",
"type": "file",
"size": 426,
"created": "2024-05-20T14:30:00.000Z",
"sha1": "506438fbfc4a029ffee8b001fdce3c2cbd5541ec",
"sha256": "a1b2c3d4e5f67890abcdef1234567890abcdef1234567890abcdef1234567890"
}
2. 使用jfrog rt search命令批量定位
如果不知道工件具体路径,也可以通过哈希值搜索匹配工件,同时获取其元数据:
jfrog rt search --props "sha1=506438fbfc4a029ffee8b001fdce3c2cbd5541ec" --server-id af-server.com --format json
加上--format json能更清晰地查看包含哈希的结构化信息。
二、如何按指定哈希值下载二进制文件
你之前的命令存在几个语法问题:
--props参数的引号未闭合--server-id的位置错误(应放在命令参数末尾或路径之前)- 工件路径的位置不符合命令格式
下面是两种正确的实现方式:
1. 直接通过jfrog rt download配合props过滤
如果你知道目标仓库名称,可以用通配符匹配仓库内所有工件,再通过哈希属性过滤下载:
jfrog rt download "afrepo/*" --props "sha1=506438fbfc4a029ffee8b001fdce3c2cbd5541ec" --server-id af-server.com
这里afrepo/*表示匹配afrepo仓库下所有工件,--props会精准过滤出SHA1匹配的文件并下载。
2. 先搜索定位工件,再下载(更可靠)
如果不确定工件具体路径,可先搜索获取目标路径,再执行下载:
# 第一步:搜索匹配SHA1的工件,得到完整路径 jfrog rt search --props "sha1=506438fbfc4a029ffee8b001fdce3c2cbd5541ec" --server-id af-server.com # 第二步:使用获取到的路径执行下载 jfrog rt download "afrepo/test_repo/test.txt" --server-id af-server.com
也可以用一行命令结合xargs自动完成搜索+下载:
jfrog rt search --props "sha1=506438fbfc4a029ffee8b001fdce3c2cbd5541ec" --server-id af-server.com | xargs -I {} jfrog rt download {} --server-id af-server.com
注意:Artifactory的内置哈希属性名是全小写的sha1和sha256,务必使用正确的属性名,否则过滤规则会失效。
内容的提问来源于stack exchange,提问作者brane

