ITPub博客

首页 > 自动化运维 > DevOps > Artifactory清理未使用的二进制品的最佳实践

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

原创 DevOps 作者:JFrog杰蛙科技 时间:2020-03-10 18:44:58 0 删除 编辑

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 获取课程通知


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69954434/viewspace-2679482/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-11-15

  • 博文量
    82
  • 访问量
    59009