删除Nexus3(不是Nexus2)上的工件的groovy脚本

删除Nexus3(不是Nexus2)上的工件的groovy脚本,groovy,scripting,nexus,nexus3,Groovy,Scripting,Nexus,Nexus3,我有一台Nexus3服务器,我把工件保存在它上面,它已经被填充到了最大值。 我希望创建一个任务,每天删除旧工件,但始终保留至少50个工件。问题是应该执行的默认任务不起作用。 因此,我了解到可以使用groovy脚本来完成,我计划在任务内部运行该脚本 有人能帮我吗?我在网上找不到任何有用的东西。我偶然发现了同样的问题。我真的认为这些特性应该在nexus开箱即用中,但是删除旧发布的工件等任务只是等待nexus积压中的时间。最后,我编写了一些脚本来显示在哪个repo中存储了多少工件,以及每月存储多少

我有一台Nexus3服务器,我把工件保存在它上面,它已经被填充到了最大值。 我希望创建一个任务,每天删除旧工件,但始终保留至少50个工件。问题是应该执行的默认任务不起作用。

因此,我了解到可以使用groovy脚本来完成,我计划在任务内部运行该脚本


有人能帮我吗?我在网上找不到任何有用的东西。

我偶然发现了同样的问题。我真的认为这些特性应该在nexus开箱即用中,但是删除旧发布的工件等任务只是等待nexus积压中的时间。最后,我编写了一些脚本来显示在哪个repo中存储了多少工件,以及每月存储多少工件等等。 然后我写了一个脚本来删除旧的。。。 您可能可以使用或扩展此功能:

根据@daniel schröter的回答,您可以添加一个
计划任务
,如下示例:

转到
系统->任务
,然后单击
创建任务
。创建脚本任务:

将语言设置为
groovy
,并复制修改后的脚本以适应计划任务(您应该提供自己的修改,这只是一个示例):

import org.sonatype.nexus.repository.storage.Component
导入org.sonatype.nexus.repository.storage.Query
导入org.sonatype.nexus.repository.storage.StorageFacet
log.info(“删除存储库的组件:我的repo”)
def compInfo={Component c->“${c.group()}:${c.name()}:${c.version()}[${c.lastUpdated()}]}”
def repo=repository.repositoryManager.get(“我的回购”)
StorageFacet StorageFacet=repo.facet(StorageFacet)
def tx=storageFacet.txSupplier().get()
开始
Iterable components=tx.findComponents(Query.builder().where('last_updated<')).param('2190-01-01').build(),[repo])
tx.commit()
关闭
log.info(“即将删除”+组件。展平(compInfo))
用于(组件c:组件){
日志信息(“删除”+compInfo(c))
tx2=storageFacet.txSupplier().get()
tx2.begin()
tx2.删除组件(c)
tx2.commit()
tx2.close()
}
log.info(“已完成删除”+组件。展平(compInfo))

您总共有50个maven工件还是同一工件的50个不同版本?我不清楚你想做什么,也不清楚为什么你展示的任务不起作用。我有存储库名称production,我只想在那里保存最后50个工件版本,所以每天它都会删除最旧的工件版本,直到只剩下50个。这是相同的工件,不同的构建器一天输出多少快照?超过50个?太多了。。但不到50。。。但是我们的开发者有他们的时代。测试存储库有疯狂的上传rateOkie。你能描述一下为什么上面列出的任务不起作用吗?或者你觉得这超出了范围?我认为根据您对场景的描述,它应该可以工作。我在执行
log.delete
脚本时遇到问题。我改为
log.info
,它可以工作。我使用Nexus 3.12.1是的,我忘了提到,我已经更新了答案。我使用脚本删除了一个组。然后运行任务压缩blob存储,然后重建元数据。现在我没有工件,只有许多maven元数据文件。我怎样才能删除这些呢?
import org.sonatype.nexus.repository.storage.Component
import org.sonatype.nexus.repository.storage.Query
import org.sonatype.nexus.repository.storage.StorageFacet

log.info("delete components for repository: my-repo")

def compInfo = { Component c -> "${c.group()}:${c.name()}:${c.version()}[${c.lastUpdated()}]}" }

def repo = repository.repositoryManager.get("my-repo")
StorageFacet storageFacet = repo.facet(StorageFacet)

def tx = storageFacet.txSupplier().get()
tx.begin()
Iterable<Component> components = tx.findComponents(Query.builder().where('last_updated < ').param('2190-01-01').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))