用于删除nexus 3上的工件的groovy脚本(不是nexus 2)

时间:2017-08-09 11:53:55

标签: groovy scripting nexus nexus3

我有nexus 3服务器,我在其上保存了工件,并且已经填充到最大。 我希望创建一个每天删除旧工件的任务,但始终保留至少50个工件。问题是应该这样做的默认任务不起作用。 configuration part 1

configuration part 2

所以我读到它可以用我计划在任务中运行的groovy脚本来完成。

任何人都可以帮助我吗?我无法在互联网上找到任何有用的东西。

3 个答案:

答案 0 :(得分:4)

基于@daniel-schröter答案,您可以在此示例后添加Scheduled Task

转到System -> Tasks,然后单击Create Task。创建脚本任务:

enter image description here

将语言设置为groovy并复制修改后的脚本以适合预定任务(您应该对其进行修改,这只是一个示例):

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))

答案 1 :(得分:0)

我偶然发现了同样的问题。我真的认为这些功能应该是开箱即用的,但删除旧发布的工件等的任务只是在nexus积压中等待多年。最后,我写了一些脚本来显示在哪些仓库中存储了多少工件以及每月有多少工件。 然后我写了一个脚本来删除旧的... 你可以使用或扩展它: https://github.com/danischroeter/nexus-repo-scripting

答案 2 :(得分:-1)

Sonatype有一个user mailing list,他们经常指导人们提出常见的脚本建议。此外,与StackOverflow答案或评论相比,它可能是寻求有关计划任务帮助的更好的论坛。