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

Artifactory配置需求:仅保留单个构建制品,新制品上传自动删旧

解决Artifactory仅保留单个构建制品的方案

以下是几种可行的实现方式,覆盖内置配置、构建脚本集成、API调用等场景:

一、利用Artifactory内置清理规则(最省心)

直接在Artifactory仓库配置里设置自动清理:

  • 进入目标仓库的Cleanup Policies配置页
  • 新建清理规则,核心配置:
    • 启用「Keep only the last N artifacts」,把N设为1
    • 添加过滤条件(比如按制品后缀*.jar、特定路径),避免误删其他文件
    • 触发方式选「After each deployment」,确保每次上传新制品后立刻清理旧的

二、构建脚本中前置删除逻辑

在上传新制品前,先删除仓库里的旧制品,适合需要精准控制的场景:

Maven/Shell 示例(用jfrog-cli)

# 删除指定路径下所有旧制品
jfrog rt del "my-repo/apps/my-service/*" --quiet
# 上传新构建的制品
jfrog rt upload "target/my-service-*.jar" "my-repo/apps/my-service/"

Gradle 示例

在build.gradle里加前置任务:

task cleanOldArtifacts(type: Exec) {
    commandLine 'jfrog', 'rt', 'del', 'my-repo/apps/my-service/*', '--quiet'
}

// 上传前先执行删除
uploadArchives.dependsOn(cleanOldArtifacts)

三、用REST API精准删除旧制品

如果需要更灵活的逻辑(比如按上传时间筛选),可以写个脚本调用Artifactory API:

# 获取仓库中指定路径下,除最新制品外的所有文件路径
OLD_ITEMS=$(curl -u your-username:your-password "https://artifactory.example.com/api/search/aql" -d '
items.find({
  "repo": "my-repo",
  "path": "apps/my-service"
}).sort({"$desc": ["created"]}).skip(1).include("repo", "path", "name")
' | jq -r '.results[] | .repo + "/" + .path + "/" + .name')

# 循环删除旧制品
for ITEM in $OLD_ITEMS; do
  curl -u your-username:your-password -X DELETE "https://artifactory.example.com/api/storage/$ITEM"
done

把这个脚本和你的构建流水线绑定,上传完新制品后执行即可。

四、绑定构建记录清理(适合关联构建的场景)

如果你的制品和Artifactory构建记录关联,可以通过清理旧构建来自动删制品:

  • 进入构建配置页,启用「Discard Old Builds」,设置仅保留最新1个构建
  • 勾选「Delete artifacts when discarding builds」,删除旧构建时会同步删除对应的制品

内容的提问来源于stack exchange,提问作者Mahesh Margam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:04:55