You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Artifactory清理:如何正确删除Conan包与Docker镜像?

清理Artifactory中Conan包与Docker镜像的最佳实践

一、不推荐用Conan/Docker CLI清理

Conan和Docker CLI的核心定位是包管理、镜像构建,并非批量清理工具。用它们操作需要额外配置客户端与Artifactory的关联,步骤繁琐,还容易遗漏元数据,不符合你“不依赖外部工具”的需求。

二、优先用JFrog CLI或Artifactory REST API操作

这两种都是Artifactory原生支持的方式,无需第三方依赖,且能保证操作完整性:

1. 别直接删底层文件夹

Artifactory里Conan包和Docker镜像都有特定目录结构:

  • Conan包:一般存在conan-local/<包名>/<版本>/<用户>/<渠道>层级下
  • Docker镜像:存在docker-local/<仓库名>/<镜像名>/<标签>或哈希目录下

但直接删除文件夹会导致元数据不同步,比如索引、统计信息、权限关联等残留,后续可能出现搜索异常、仓库状态不一致的问题,绝对不推荐。

2. JFrog CLI的正确用法

JFrog CLI是官方推荐的批量操作工具,删除时会自动同步清理所有相关元数据,确保仓库状态一致:

  • 清理Conan包:用jf rt delete命令,可指定路径或通过AQL筛选批量删除
    示例命令:
    # 删除指定版本的Conan包
    jf rt delete "conan-local/my-package/1.0.0/*" --recursive
    # 批量删除2023年1月1日前修改的Conan包
    jf rt delete --spec="{\"files\":[{\"aql\":\"items.find({\\\"repo\\\":\\\"conan-local\\\",\\\"modified\\\":{\\\"$lt\\\":\\\"2023-01-01T00:00:00Z\\\"}})\"}]}"
    
  • 清理Docker镜像:同样用jf rt delete,可按标签或哈希删除,建议用AQL筛选批量操作
    示例命令:
    # 删除指定标签的Docker镜像
    jf rt delete "docker-local/my-image:old-tag" --recursive
    # 删除30天未修改的Docker镜像
    jf rt delete --spec="{\"files\":[{\"aql\":\"items.find({\\\"repo\\\":\\\"docker-local\\\",\\\"modified\\\":{\\\"$lt\\\":\\\"$(date -d '-30 days' +%Y-%m-%dT%H:%M:%SZ)\\\"}})\"}]}"
    

3. Artifactory REST API的用法

如果需要更灵活的脚本集成,REST API也是可行方案,同样会同步处理元数据:

  • 删除Conan包:发送DELETE请求到存储路径,添加recursive=1参数删除整个包目录
    示例请求:
    curl -X DELETE -u admin:your-password "http://your-artifactory-url/api/storage/conan-local/my-package/1.0.0?recursive=1"
    
  • 删除Docker镜像:Docker镜像由manifest和分层文件组成,建议先通过AQL查询所有相关文件,再批量删除,或直接删除镜像根目录
    示例AQL查询(获取目标镜像文件):
    {
      "items.find": {
        "repo": "docker-local",
        "path": {"$match": "my-image/old-tag/*"}
      }
    }
    
    根据返回的uri逐个发送DELETE请求,或直接删除根路径:
    curl -X DELETE -u admin:your-password "http://your-artifactory-url/api/storage/docker-local/my-image/old-tag?recursive=1"
    

三、脚本简洁性建议

  • 优先选JFrog CLI:它封装了复杂API逻辑,命令简洁,内置AQL支持,批量筛选和删除一步到位
  • 若不想装JFrog CLI:用curl调用REST API,脚本中封装AQL查询和批量删除逻辑即可,避免重复代码

内容的提问来源于stack exchange,提问作者eran be

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 23:27:03