Nexus Repository Manager - удаление старых бинарных ресурсов
Интересно, есть ли способ удалить много элементов из хранилища Nexus? у меня есть немного RAW
Напечатайте репозитории с некоторыми выпусками веб-приложений (простые двоичные файлы tar.bz2):
https://stack ru.com/images/d260299ee5a5f20708c310d04d2d011ad79e0238.png
В некоторых репозиториях их много. Я хочу освободить место на диске. Я могу удалить отдельные файлы:
https://stack ru.com/images/203c164391c98f3004f85de4b2e82bc51f3d3f59.png
но я не вижу вариант массового удаления.
Лучшим решением для меня будет автоматическая или ручная очистка старых файлов. Это возможно в бесплатной версии? Если да - как?
Я не вижу Cleanup Policies
в главном меню:
https://stack ru.com/images/4432469a92e1d5761222f82a72b536451d6333e9.png
Nexus Repository ManagerOSS 3.3.2-02
2 ответа
Я нашел решение для моей проблемы.
У меня нет Cleanup Policy
раздел в моей консоли администратора ( я думаю, что эта опция доступна только для профессиональной или следующей версии) - Спасибо @Sebastian
за ваши советы, вы направили меня к решению.
Исходя из этого вопроса: очистить старый релиз от 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))
Просмотр логов очень полезен для отладки скриптов:)
Это вполне возможно с Nexus3 OSS:
1. Создайте политику очистки
В разделе "Репозиторий -> Политики очистки" вы можете добавить политику, которая удаляет артефакты из репозитория, которые:
- Опубликованы до X дней
- Последнее скачивание за X дней
2. Добавьте эту политику в свой репозиторий
Отредактируйте свой репозиторий. В разделе "Политика очистки" выберите свою новую политику.
Так как очищенные репозитории только мягко удаляют артефакты (отметьте их для удаления), вам необходимо:
3. Сожмите свой блоб-магазин
Перейдите в "Система -> Задачи -> Создать задачу", выберите задачу "Администратор - Компактное хранилище больших двоичных объектов", выберите хранилище больших двоичных объектов в хранилище и настройте эту задачу для запуска после задачи очистки.
Все это описано более подробно в документации Nexus.
Я проверил шаги с Nexus 3.15.2-01 OSS Edition.