如何循环执行AQL批量删除JFrog Artifactory多仓库中过期制品?
批量操作多仓库删除过期制品的两种实现方案
方案1:直接修改AQL规则批量匹配多仓库(无需循环,推荐)
你不需要拆分循环,直接在AQL的repo匹配规则中用$in语法指定所有需要操作的仓库列表即可,单份spec文件就能完成全量操作,修改后的spec示例如下:
{ "files": [ { "aql": { "items.find": { "repo": {"$in": ["repo1", "repo2", "repo3", "repo4"]}, "modified": { "$lt": "2021-06-06T21:26:52.000Z"} } } } ] }
注:你原AQL里冗余的
$or、$and嵌套已简化,单条件下不需要额外套逻辑运算符,功能完全等价。
修改后直接执行原来的删除命令即可:jfrog rt del --spec /tmp/foo.spec --dry-run
确认dry-run的结果符合预期后再去掉--dry-run参数执行实际删除。
方案2:Shell 循环动态替换仓库名(适合需要单独控制每个仓库执行逻辑的场景)
如果你需要针对每个仓库单独统计、加判断逻辑,可以用shell循环动态生成临时spec文件执行,参考脚本如下:
#!/bin/bash # 定义需要操作的仓库列表 REPO_LIST=("repo1" "repo2" "repo3" "foobar") # 定义6个月前的时间阈值(自动生成无需手动修改,Linux环境用如下命令,Mac环境替换为 date -v-6m +%Y-%m-%dT%H:%M:%S.000Z) EXPIRE_DATE=$(date -d "-6 months" +%Y-%m-%dT%H:%M:%S.000Z) for repo in "${REPO_LIST[@]}" do echo "正在处理仓库:${repo}" # 动态生成临时spec文件 cat > /tmp/tmp_del_spec.json << EOF { "files": [ { "aql": { "items.find": { "repo": "${repo}", "modified": { "\$lt": "${EXPIRE_DATE}"} } } } ] } EOF # 先执行dry-run验证 jfrog rt del --spec /tmp/tmp_del_spec.json --dry-run # 确认无误后可以注释上面的dry-run命令,打开下面的实际删除命令 # jfrog rt del --spec /tmp/tmp_del_spec.json done
给脚本加执行权限后直接运行即可自动遍历所有仓库执行操作。
内容的提问来源于stack exchange,提问作者sg0133
相关产品推荐
相关产品推荐

