无需插件与JFrog CLI,通过Artifactory Delete REST API按时间段删制品
用Artifactory REST API按时间过滤删除旧制品
可以通过**Artifactory Query Language (AQL)**结合REST API实现按天数/月数过滤删除旧制品,步骤分为「查询符合条件的制品」和「批量删除」两部分,以下是具体操作:
1. 查询指定时间前的制品
使用AQL可以筛选出最后修改/创建时间超过指定天数的制品,通过curl发送POST请求到AQL搜索接口:
curl -u 你的用户名:你的密码/API密钥 -XPOST "http://你的Artifactory地址/artifactory/api/search/aql" -d ' items.find({ "repo": "目标仓库名", "path": {"$match": "目标文件夹/*"}, # 匹配目标文件夹下的所有内容 "last_modified": {"$lt": now() - 30*24*3600*1000} # 筛选30天前修改的制品 }).include("repo", "path", "name") '
参数说明:
repo:替换为你要清理的仓库名称path:$match后填目标文件夹路径,*表示匹配该文件夹下所有层级的内容last_modified:按最后修改时间过滤,若要按创建时间过滤,替换为created30*24*3600*1000:30天对应的毫秒数,可修改为需要的天数(比如90天则改为90*24*3600*1000)
执行后会返回符合条件的制品列表,包含仓库、路径和文件名。
2. 批量删除查询到的制品
可以结合jq(需提前安装,若没有也可手动提取路径)解析查询结果,循环调用删除接口:
# 先查询并解析出制品完整路径,再逐个删除 curl -u 你的用户名:你的密码/API密钥 -XPOST "http://你的Artifactory地址/artifactory/api/search/aql" -d ' items.find({ "repo": "目标仓库名", "path": {"$match": "目标文件夹/*"}, "last_modified": {"$lt": now() - 30*24*3600*1000} }).include("repo", "path", "name") ' | jq -r '.results[] | "/artifactory/\(.repo)/\(.path)/\(.name)"' | while read -r item_path; do curl -u 你的用户名:你的密码/API密钥 -XDELETE "http://你的Artifactory地址$item_path" done
注意事项:
- 请先单独执行查询命令,确认返回的制品是你要删除的内容,再执行删除操作
- 若没有
jq,可以手动复制查询结果中的路径,拼接成http://你的Artifactory地址/artifactory/仓库名/路径/文件名,逐个调用DELETE请求 - 确保你的账号有对应仓库的删除权限
内容的提问来源于stack exchange,提问作者Alessandro Violante
相关产品推荐
相关产品推荐

