问题描述
我想知道是否有办法从nexus存储库中删除许多项目。
我有一些RAW
类型的存储库和一些Web应用程序版本(简单的tar.bz2二进制文件):
在一些存储库中有很多。 我想释放一些磁盘空间。 我可以删除单个文件:
但我没有看到批量删除选项。
对我来说最好的解决方案是自动或手动清理旧文件。 它有可能在免费版本? 如果是 - 如何?
我在主菜单中看不到Cleanup Policies
:
Nexus Repository ManagerOSS 3.3.2-02
1楼
使用Nexus3 OSS完全可以:
1.创建清理策略
在“存储库 - >清理策略”下,您可以添加从存储库中删除工件的策略:
- 在X天之前发布
- 最后在X天前下载
2.将此策略添加到存储库
编辑您的存储库。
在“清理策略”下,选择您的新策略。
由于清理了存储库,只需工件(将其标记为删除),您需要:
3.压缩你的blob商店
转到“系统 - >任务 - >创建任务”,选择“管理 - 压缩Blob存储”任务,选择存储库的blob存储,并将此任务配置为在清理任务之后运行。
所有这些都在中有更详细的描述。
我已经使用Nexus 3.15.2-01 OSS版测试了这些步骤。
2楼
我找到了解决问题的方法。
我的管理控制台中没有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))
日志查看器对调试脚本很有帮助:)