Artifactory清理未使用的二进制品的最佳实践

Artifactory充分利用了基于Checksum的存储,但是这种机制无法代替常规的工件清理任务。软件开发可能很杂乱,很多时候Artifactory中的许多工件都从未使用过。
例如,许多CI / CD构建都配置为基于源代码控制“提交”运行,并且一旦将这些快照构建发送到Artifactory,就永远不会实际下载它们。
考虑到软件开发的动态性质,大多数组织都有自己的数据保留策略。由您决定可以清除哪些数据,但是内置工具可以覆盖大多数情况。
通常,在Artifactory中使用三种技术来管理工件存储:
–限制保留多少SNAPSHOT
–清除超大缓存
–删除未使用的工件

限制保留多少SNAPSHOT

Artifactory具有内置机制来限制构建的“快照”。该系统的目的是确保在覆盖“release”工件之前将其从“snapshots”存储库中升级出来。
Artifactory支持六种存储库类型的“最大唯一快照”标记:
– Maven – NuGet
– Gradle –Ivy
– Docker – SBT

Artifactory使用Artifactory Layout系统跟踪快照的数量。这意味着用户在上载快照工件时需要遵循预定义的模式(大多数客户端会自动处理)。
例如,此Maven JAR文件被识别为快照运行编号3的一部分:
jfrog / hello / 1.0.5-SNAPSHOT / hello-1.0.5-20190620.224837-3.jar

大多数CLI客户端使用特定模式进行上传,Artifactory的默认布局应涵盖这些情况。您可以根据需要自定义这些存储库类型的布局,以处理自定义上传路径。
要在Artifactory中启用此功能,请更新本地存储库设置:

启用此设置后,在“最大唯一快照数”上方进行的上传将在下次构建运行期间删除所有较早的发行版。
最高的数字将始终是最新版本。

清除超大缓存

Artifactory的远程存储库将下载的文件存储在缓存中。通常,保留整个缓存是有益的,因为它可以加快下载速度。但是,如果项目使用的工件有所更改,则值得定期清除缓存。
在Artifactory中有支持此功能的内置系统。要启用自动缓存清除,请转到远程存储库菜单的“高级”部分。
您可以在“ 未使用的工件清理期”部分中添加清理工件之前的小时数:

这并不意味着工件会在12小时后被删除。相反,它在内部将工件标记为“未使用”。
在“ 管理员”->“高级”->“维护 ” 下找到一个单独的作业,称为“清理未使用的缓存工件”,它将执行清理。默认情况下,此cron作业每天运行一次。
删除未使用的工件
通常,Artifactory通常不会自动删除二进制文件。也有例外,例如本文中已讨论的字段。
话虽如此,通过删除长时间未下载的工件可以节省大量存储空间。自动清除未使用的文件的最佳方法是实施Artifactory User Plugin。
JFrog开发的最受欢迎的用户插件之一是“ artifactCleanup”插件。该插件在Cron Job上运行,并自动删除“ X”天之内尚未下载的任何工件。
如果您需要进一步自定义插件,则可以在代码中更改Artifactory Query Language语句:
def aql =“ items.find({” repo“:”“ + repoKey +”“,” type“:” any“,” @ cleanup.skip“:” true“})。include(” repo“,” path “,”名称“,”类型“)”
需要注意的一件事:artifactCleanup在Docker Repositories上不起作用。
Docker映像层作为单独的工件存储在“ image”文件夹中。如果大多数Docker客户端中已经有一个层,则不会经常下载该层。由于行为上的差异,建议使用单独的“ cleanDockerImages”插件。
它依赖manifest.json文件的下载计数,该文件始终在发生“ docker pull”时下载。

参考资料:

https://jfrog.com/knowledge-base/artifactory-cleanup-best-practices/

补充资料:

  • AQL清理:

https://jfrog.com/blog/advanced-cleanup-using-artifactory-query-language-aql/

-清理已有数据:通过 Rest API 清理 90 天内无人下载的 snapshot,或者是 90 天以前的所有 snapshot,这样能够大大减少存储量,加快索引速度。

https://www.jfrog.com/confluence/display/RTF/Managing+Disk+Space+Usage#ManagingDiskSpaceUsage-ManualCleanupwiththeRESTAPI

-定期清理新增数据:在页面上配置实时清理 snapshot:

https://www.jfrog.com/confluence/display/RTF/Managing+Disk+Space+Usage#ManagingDiskSpaceUsage-LimitingtheNumberofSnapshots

更多精彩内容可以专注我们的在线课堂
微信搜索公众号:jfrogchina 获取课程通知

原文地址:https://blog.51cto.com/jfrogchina/2477095

时间: 2024-07-31 03:43:12

Artifactory清理未使用的二进制品的最佳实践的相关文章

Artifactory 仓库架构和命名最佳实践(下)

在上篇文章中,我们已经建立了基本的仓库命名结构,在 JFrog Artifactory 中,仓库管理的最佳实践应该考虑三个因素:安全性,性能和可操作性.大多数情况下,这些因素跟你的团队规模密切相关,在较小程度上跟仓库成熟度等级的粒度划分有一定的关系. 安全 Artifactory 允许通过包含/排除模式在单个文件夹甚至文件级别进行管理权限.一般来说,这里的最佳做法是在仓库级别管理权限.对于具有高度结构化的仓库(如 Maven 和 RPM),可以在文件夹级别实现细粒度的控制.但是,对于管理员来说,

ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践

写在前面 :从提出需求到完美的解决问题,实现过程是曲折的. 需求:在前(web client)后(Restful Service)端完全解耦的模式框架下,webclient需要请求 Service 返回的图片文件(二进制流),并在client端显示. 第一步思考:拿到此需求, 基于程序员的狂妄心里,思考到显示图片而已,jquery ajax直接get请求 将返回data 赋值给img标签的src属性即可嘛,so easy~ 不知天高地后的小子开始码代码,经过几分钟给出了以下的代码,并自信满满的准

Swift 最佳实践(未完待续)

使用 Swift 进行软件开发的最佳实践. 本文档的英文版在这里,感谢Swift社区(频道为 #bestpractices )为我们提供如此优质的文档. 前言 这个文档的产生得益于我在创作Swift Graphics时做的一系列的手记.本指南中的大部分建议也考量了是否可以为其它的观点和论点.当然,感觉其他的方法必须存在时除外. 这些最佳实践没有规定或推荐 Swift 是否应该在一个程序上以面向对象的或者函数式的方式来使用. 本文档更多的是关注 Swift 语言及其标准库.也就是说,以一个纯粹的

为何在查询中索引未被使用 (Doc ID 1549181.1)

* 为何在查询中索引未被使用 (Doc ID 1549181.1) To Bottom 文档内容 用途   排错步骤   快速检查   表上是否存在索引?   索引是否应该被使用?   索引本身的问题   索引列或者索引的前置列是否在单表(non-join)查询的 Where 条件中(predicate list)?   索引列是否用在连接谓词中(join predicates)?   索引列在 IN 或者多个 OR 语句中?   索引列是否被函数修改?   隐式类型转换(implicit ty

Mysql学习之--Mysql二进制日志管理

Mysql学习之--Mysql二进制日志管理 简介:     MySQL的二进制日志可以说或是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是失误安全型的.      MySQL的二进制日志的作用是显而易见的,可以方便的备份这些日志以便做数据恢复,也可以作为主从复制的同步文件,然而二进制日志的大小可能会根据不同的需求而存在麻烦,所以让日志回滚是必须的,当然MySQL已经为我们提供了二进制回滚的功

RedHat系列软件管理(第二版) --二进制软件包管理

RedHat系列软件管理 --二进制软件包管理 Linux学习思想-Linux相对与Windows来非常透明,因此,无论是系统,还是软件,都会有本身自带,或者是Man给提供的非常详细的说明/帮助文档,只要我们利用好这些文档,只要英文足够好,不需要任何教科书,任何教学视频,你都可以学好Linux! RPM包管理 Linux软件包命名形式 sudo-1.7.2p1-5.el5.i386.rpm #其中包括软件名(sudo),版本号(1.7.2pl),发行号(5.el5),和硬件平台(i386) 卸载

anddroid悬浮窗的手机QQ后台清理不掉的秘密

问题来自于一篇文章:手机QQ后台为何清不掉?MIUI工程师:全靠1像素的页面保命出于好奇,想知道这一像素到底是啥东西,用手机安全管家控制QQ的悬浮窗权限:关闭QQ的悬浮窗权限,通过后台一键清理,重新打开QQ,发现是从splash开始的:打开QQ的悬浮窗权限,一键清理后,打开QQ,发现是直接进入主界面的:说明一键清理未清理QQ,或者清理之后,QQ又自启动了.至于,是未被清理还是自启动,后面再探究一下,这里就说说这个一像素的悬浮窗. Button button = new Button(getApp

手机QQ后台清理不掉的秘密——anddroid悬浮窗

问题来自于一篇文章:手机QQ后台为何清不掉?MIUI工程师:全靠1像素的页面保命 出于好奇,想知道这一像素到底是啥东西,用手机安全管家控制QQ的悬浮窗权限: 关闭QQ的悬浮窗权限,通过后台一键清理,重新打开QQ,发现是从splash开始的: 打开QQ的悬浮窗权限,一键清理后,打开QQ,发现是直接进入主界面的:说明一键清理未清理QQ,或者清理之后,QQ又自启动了. 至于,是未被清理还是自启动,后面再探究一下,这里就说说这个一像素的悬浮窗. Button button = new Button(ge

初始化和清理

初始化与清理 用构造器确保初始化,构造器 编程的安全问题是我们越来越关注的问题,如果没有及时清理不用的对象,回收内存资源,就容易出现内存溢出问题 因为每个对象的出现都需要初始化, 只有初始化后, 才能再内存中分配合适的资源,而Java中提供构造方法进行初始化. 调用构造器是编译器的责任. 构造器的名字问题很是困扰, 因为不能和成员的名称相冲突, 于是Java就默认用类名字为构造器取名字 关于构造器,只要知道无参构造方法和有参构造方法, 构造器前面说了是为了 创建对象, 再内存空间中分配大小的时候