当前位置: 代码迷 >> java >> Nexus Repository Manager - 删除旧的二进制资源
  详细解决方案

Nexus Repository Manager - 删除旧的二进制资源

热度:63   发布时间:2023-07-31 11:54:09.0

我想知道是否有办法从nexus存储库中删除许多项目。 我有一些RAW类型的存储库和一些Web应用程序版本(简单的tar.bz2二进制文件):

在一些存储库中有很多。 我想释放一些磁盘空间。 我可以删除单个文件:

但我没有看到批量删除选项。

对我来说最好的解决方案是自动或手动清理旧文件。 它有可能在免费版本? 如果是 - 如何?

我在主菜单中看不到Cleanup Policies

Nexus Repository ManagerOSS 3.3.2-02

使用Nexus3 OSS完全可以:

1.创建清理策略
在“存储库 - >清理策略”下,您可以添加从存储库中删除工件的策略:

  • 在X天之前发布
  • 最后在X天前下载

2.将此策略添加到存储库
编辑您的存储库。 在“清理策略”下,选择您的新策略。

由于清理了存储库,只需工件(将其标记为删除),您需要:

3.压缩你的blob商店
转到“系统 - >任务 - >创建任务”,选择“管理 - 压缩Blob存储”任务,选择存储库的blob存储,并将此任务配置为在清理任务之后运行。

所有这些都在中有更详细的描述。

我已经使用Nexus 3.15.2-01 OSS版测试了这些步骤。

我找到了解决问题的方法。

我的管理控制台中没有Cleanup Policy部分( ) - 谢谢@Sebastian的建议,您指导我解决方案。

基于这个问题:

我创建了一些手动任务来清理我的二进制存储库:

我的清理任务非常简单,但是任何需要更复杂的东西的人都可以编写自己的Groovy脚本或寻找现成的解决方案。

import org.sonatype.nexus.repository.storage.Component
import org.sonatype.nexus.repository.storage.Query
import org.sonatype.nexus.repository.storage.StorageFacet

def removeFromDate = '2019-02-01'

log.info("delete components for repository: HereYourRepoName")
def compInfo = { Component c -> "${c.group()}:${c.name()}:${c.version()}[${c.lastUpdated()}]}" }
def repo = repository.repositoryManager.get("HereYourRepoName")
StorageFacet storageFacet = repo.facet(StorageFacet)

def tx = storageFacet.txSupplier().get()
tx.begin()
Iterable<Component> components = tx.findComponents(Query.builder().where('last_updated < ').param(removeFromDate).build(), [repo])
tx.commit()
tx.close()

log.info("about to delete " + components.flatten(compInfo))
for(Component c : components) {
    log.info("deleting " + compInfo(c))
    tx2 = storageFacet.txSupplier().get()
    tx2.begin()
    tx2.deleteComponent(c)
    tx2.commit()
    tx2.close()
}

log.info("finished deleting " + components.flatten(compInfo))

日志查看器对调试脚本很有帮助:)

  相关解决方案