为什么存储信息REST API帐户重复docker层,我们如何避免它?
正如这里提到的JIRA我们报告了存储信息REST接口值得一提的是,在这部分响应中报告的大小确实会计算重复的层,并且它是这样设计的。
这个调用使用了Artifactory UI的Storage页面中显示的相同信息:
您可能已经知道有两种不同的大小:二进制文件大小(橙色)和工件大小(绿色)。二进制大小是计算一次的每个文件的大小,它是存储库大小的值,用蓝色线表示。正如您在那个表中看到的,所有的存储库加起来就是工件的总大小,这就是为什么调用在响应中计算重复的数量。
我们不为每次回购提供二进制大小的原因是技术上不存在。您可以删除包含1TB工件的整个存储库,并且如果您在不同的repo中有足够的引用,那么您可能无法释放一个兆字节的空间。但是,我们知道计算工件的重复数据删除大小是有用的,我们可以使用AQL.
例如,如果每个校验和计算一次,这个Python3脚本将获得每个回购的大小,并打印出结果:def审计():
import requests # API请求的必要库
从集合中导入defaultdict#用于计数的漂亮数据结构
Base_url = 'http://localhost:8081/artifactory/' #你的artifactory实例
headers = {'content-type': 'text/plain',} #用于查询的headers
Data = 'items.find({"name":{"$match":"*"}})。include("actual_sha1", "repo", "size")' #查询所有工件
myResp =请求。post(base_url+'api/search/aql', auth=('admin', 'password'), headers=headers, data=data) #执行查询
myrespp = eval(myrespp .text)
Total = defaultdict(int)
回购= {}
为myResp["results"]中的项目:
试一试:
回购(项目(“回购”]][[“actual_sha1”]]项=项目(“大小”)
除了:
回购[item["repo"]] = {}
回购(项目(“回购”]][[“actual_sha1”]]项=项目(“大小”)
总计[item["repo"]] += int(item["size"])
对于repo, repos.items()中的工件:
print(" Repo {}".format(Repo))
对于工件,size在artifacts.items()中:
print("[{}]——校验和:{}——大小:{}"。格式(回购,工件,大小))
打印 ("==================")
打印 ("==================")
打印 ("==================")
对于repo, total在total.items():
print("Repo{}总共使用{}byes."。格式(回购))
如果__name__ == '__main__':
审计()
下面是一个输出的例子:
为Repo测试通用存储每个工件
[test-generic]——校验和:3ae3f83349b04656faa27ae59b2287c06bdc428b——大小:423232
[test-generic]——校验和:591d8d38b865ab1ef4218120779f78ec950d97b0——大小:3045251
[test-generic]——校验和:a113a4b034a150990514c3f0c6f1c0f2b72384a5——大小:1410580
==================
存储每个工件回购块-本地
[nuget-local]——校验和:3b71f43ff30f4b15b5cd85dd9e95ebc7e84eb5a3——大小:1048576
[…更多的数据…]
为Repo debian远程缓存存储每个工件
[debian-remote-cache]——Checksum:a113a4b034a150990514c3f0c6f1c0f2b72384a5——Size:1410580
==================
为Repo中心缓存存储每个工件
[jcenter-cache]——校验和:b899da20a0f408d00cfe32a268458fb401d5d698——大小:1546674
==================
Repo test-generic-2的每个工件存储
[test-generic-2]——校验和:e6bbc45386305b92f08f894deb1b47c66bd3d815——大小:788
==================
==================
==================
Repo npm-remote-cache总共使用2699个byes。
Repo docker-remote-cache总共使用553个byes。
Repo pypi-local总共使用163个byes。
Repo lib -release-local总共使用34个byes。
Repo conan-local总共使用791405 byes。
Repo pypi-remote-cache总共使用17592个byes。
Repo debian-local总共使用713个byes。
Repo test-generic总共使用423232个byes。
Repo nuget-local总共使用1048576个byes。
Repo test-cache总共使用5836个byes。
Repo debian-remote-cache总共使用1410580个byes。
Repo jcenter-cache总共使用了1546674个byes。
Repo test-generic-2总共使用了788个byes。
