Nexus Repository Manager - 删除旧的二进制资源
Nexus Repository Manager - removing old binary resources
我想知道是否有办法从 Nexus 存储库中删除许多项目。我有一些 RAW
类型的存储库,其中包含一些 Web 应用程序版本(简单的 tar.bz2
二进制文件):
在某些存储库中有很多。我想释放一些磁盘 space。我可以删除单个文件:
但我没有看到批量删除选项。
对我来说最好的解决方案是自动或手动清理旧文件。免费版可以吗?如果是 - 如何?
我在主菜单中没有看到 Cleanup Policies
:
Nexus Repository ManagerOSS 3.3.2-02
使用 Nexus3 OSS 完全可以做到这一点:
1.创建清理策略
在 "Repository -> Cleanup Policies" 下,您可以添加一个从存储库中删除工件的策略:
- 在 X 天之前发布
- 最后一次下载是在 X 天之前
2。将此策略添加到您的存储库
编辑您的存储库。在 "Cleanup Policy" select 您的新政策下。
由于仅清理了存储库 soft-delete 工件(将其标记为删除),您需要:
3。压缩您的 blob 存储
转到 "System -> Tasks -> Create Task"、select "Admin - Compact Blob Store" 任务、select 存储库的 blob 存储,并在清理任务后将此任务配置为 运行。
所有这些在 nexus documentation 中有更详细的描述。
我已经用 Nexus 3.15.2-01 OSS 版本测试了这些步骤。
我找到了解决问题的方法。
我的管理控制台中没有 Cleanup Policy
部分 (I think this option is available only for professional or nevest versions) - 谢谢 @Sebastian
的建议,你指导我找到了解决方案。
基于这个问题:Purge old release from Nexus 3
我创建了一些手动任务来清理我的二进制存储库:
我的清理任务非常简单,但任何需要更复杂的东西的人都可以编写自己的 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))
日志查看器对调试脚本很有帮助:)
我想知道是否有办法从 Nexus 存储库中删除许多项目。我有一些 RAW
类型的存储库,其中包含一些 Web 应用程序版本(简单的 tar.bz2
二进制文件):
在某些存储库中有很多。我想释放一些磁盘 space。我可以删除单个文件:
但我没有看到批量删除选项。
对我来说最好的解决方案是自动或手动清理旧文件。免费版可以吗?如果是 - 如何?
我在主菜单中没有看到 Cleanup Policies
:
Nexus Repository ManagerOSS 3.3.2-02
使用 Nexus3 OSS 完全可以做到这一点:
1.创建清理策略
在 "Repository -> Cleanup Policies" 下,您可以添加一个从存储库中删除工件的策略:
- 在 X 天之前发布
- 最后一次下载是在 X 天之前
2。将此策略添加到您的存储库
编辑您的存储库。在 "Cleanup Policy" select 您的新政策下。
由于仅清理了存储库 soft-delete 工件(将其标记为删除),您需要:
3。压缩您的 blob 存储
转到 "System -> Tasks -> Create Task"、select "Admin - Compact Blob Store" 任务、select 存储库的 blob 存储,并在清理任务后将此任务配置为 运行。
所有这些在 nexus documentation 中有更详细的描述。
我已经用 Nexus 3.15.2-01 OSS 版本测试了这些步骤。
我找到了解决问题的方法。
我的管理控制台中没有 Cleanup Policy
部分 (I think this option is available only for professional or nevest versions) - 谢谢 @Sebastian
的建议,你指导我找到了解决方案。
基于这个问题:Purge old release from Nexus 3
我创建了一些手动任务来清理我的二进制存储库:
我的清理任务非常简单,但任何需要更复杂的东西的人都可以编写自己的 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))
日志查看器对调试脚本很有帮助:)