Какие инструменты можно использовать для создания периодической резервной копии конкретного репозитория в Nexus3 с возможностью его восстановления?

Вопрос или проблема

Я использую Sonatype Nexus Repository Manager OSS 3.31.1-01.

На моем Nexus я использую разные типы репозиториев: Maven2, NPM, Docker, Nuget и т.д. Также есть много имен репозиториев, но я хотел бы сделать резервные копии некоторых из них (npm и nuget). Как я могу выбрать конкретный репозиторий, сделать его резервную копию, а затем восстановить его из резервной копии?

Трудно выделить что-то конкретное в древе каталогов:
nexus-data/nexus3/blobs/default/content/vol-01/chap-01

ls /nexus-data/nexus3/blobs/default/content
directpath  vol-02  vol-05  vol-08  vol-11  vol-14  vol-17  vol-20  vol-23  vol-26  vol-29  vol-32  vol-35  vol-38  vol-41
tmp         vol-03  vol-06  vol-09  vol-12  vol-15  vol-18  vol-21  vol-24  vol-27  vol-30  vol-33  vol-36  vol-39  vol-42
vol-01      vol-04  vol-07  vol-10  vol-13  vol-16  vol-19  vol-22  vol-25  vol-28  vol-31  vol-34  vol-37  vol-40  vol-43

ls /nexus-data/nexus3/blobs/default/content/vol-01
chap-01  chap-04  chap-07  chap-10  chap-13  chap-16  chap-19  chap-22  chap-25  chap-28  chap-31  chap-34  chap-37  chap-40  chap-43  chap-46
chap-02  chap-05  chap-08  chap-11  chap-14  chap-17  chap-20  chap-23  chap-26  chap-29  chap-32  chap-35  chap-38  chap-41  chap-44  chap-47
chap-03  chap-06  chap-09  chap-12  chap-15  chap-18  chap-21  chap-24  chap-27  chap-30  chap-33  chap-36  chap-39  chap-42  chap-45

ls /nexus-data/nexus3/blobs/default/content/vol-01/chap-01
0b564a56-338f-487b-9e35-40d65d8f6ad7.bytes       8d4fb8b1-c610-4bd0-a180-c99a911100c9.properties  b796d5c2-3119-42e6-be16-ed004f0b396c.bytes
0b564a56-338f-487b-9e35-40d65d8f6ad7.properties
...

Я нашел инструмент на Python, который, казалось, подходит, но он, похоже, не совсем функционален.

https://github.com/aerosadegh/Nexus3-Backup-and-Restore-File-Repository

Все необходимые модули были установлены.

Команда показывает список репозиториев:

python3.8 scripts repo-list --nexus-base-url http://mynexusurl.net:8081 --repo-name example --username ***** --password *****

┍━━━━━━━━━━━━┯━━━━━━━━━━┯━━━━━━━━┑
│ Name       │ Format   │ Type   │
┝━━━━━━━━━━━━┿━━━━━━━━━━┿━━━━━━━━┥
│ nuget-aaa  │ nuget    │ proxy  │
├────────────┼──────────┼────────┤
│ nuget-bbb  │ nuget    │ group  │
├────────────┼──────────┼────────┤
│ cccccc     │ maven2   │ hosted │
├────────────┼──────────┼────────┤
│ nuget-ddd  │ nuget    │ hosted │
├────────────┼──────────┼────────┤
│ npm-fff    │ npm      │ hosted │
├────────────┼──────────┼────────┤
│ kk         │ maven2   │ hosted │
├────────────┼──────────┼────────┤
│ hhhhhhhhhh │ maven2   │ hosted │
├────────────┼──────────┼────────┤
│ dd-jjjj    │ maven2   │ hosted │
├────────────┼──────────┼────────┤
│ nn         │ maven2   │ hosted │
├────────────┼──────────┼────────┤
│ vvvvvv     │ maven2   │ hosted │

но когда я делаю резервную копию репозитория, он выдает ошибку:

python3.8 scripts download --nexus-base-url http://mynexusurl.net:8081 --repo-name example --username ***** --password ***** --destination backup
Traceback (most recent call last):

  File "/usr/local/lib/python3.8/runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,

  File "/usr/local/lib/python3.8/runpy.py", line 87, in _run_code
    exec(code, run_globals)

  File "scripts/__main__.py", line 6, in <module>
    app()

  File "scripts/commands.py", line 41, in download
    return asyncio.run(get_repository_components(nexus_base_url, repo_name, username, password, destination))

  File "/usr/local/lib/python3.8/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)

  File "/usr/local/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()

  File "scripts/functions/download.py", line 121, in get_repository_components
    await asyncio.gather(add_task, pop_task)

  File "scripts/functions/download.py", line 70, in _pop_components
    component = await repo.pop_item()

AttributeError: 'Repository' object has no attribute 'pop_item'

Возможно, существуют какие-то встроенные инструменты в самом Nexus?

Большое спасибо всем, кто может ответить!

Ответ или решение

Для выполнения периодического резервного копирования конкретных репозиториев в Sonatype Nexus Repository Manager OSS 3.31.1-01, таких как NPM и NuGet, а также для возможности восстановления этих данных, можно использовать несколько методов:

1. Встроенные инструменты Nexus

Nexus Repository Manager предоставляет несколько возможностей для резервного копирования через API и другие встроенные функции:

  • API Nexus Repository:
    Вы можете использовать REST API Nexus для получения данных из ваших репозиториев. Документация по Nexus API доступна здесь. С помощью API вы можете разрабатывать скрипты на Python или Bash, которые будут извлекать данные из указанных репозиториев и сохранять их на внешние носители.

  • Резервное копирование данных:
    Вы можете создавать резервные копии всего каталога nexus-data, который содержит все данные, хранящиеся в Nexus. Это включает в себя бинарные файлы, метаданные и конфигурацию. Однако это может быть избыточным, если вам нужно сохранить только определенные типы репозиториев.

    tar -cvzf nexus-backup.tar.gz /nexus-data

2. Использование Python-скрипта для резервного копирования

Вы упомянули Python-скрипт из репозитория Nexus3-Backup-and-Restore-File-Repository. Несмотря на проблемы с его выполнением, скрипт может быть исправлен или адаптирован. Вот шаги, чтобы решить проблему:

  • Обновление скрипта: Проверьте, есть ли обновления в репозитории. Иногда разработчик исправляет ошибки, и более новая версия может решить вашу проблему.

  • Исправление ошибки: Ошибка AttributeError: 'Repository' object has no attribute 'pop_item' может быть вызвана несовместимостью скрипта с вашей версией Nexus. Попробуйте отследить, где происходит эта ошибка, в файле download.py, и проверьте, есть ли у объекта Repository метод pop_item.

3. Альтернативные подходы

Если проблемы со скриптами продолжаются, вы можете рассмотреть альтернативные решения:

  • Создание собственного Python-скрипта:
    Напишите свой собственный скрипт для извлечения артефактов из указанных репозиториев. Используйте API Nexus для получения списка артефактов и их загрузки.

  • Планировщик задач (cron):
    Настройте автоматизированный планировщик задач, чтобы периодически запускать ваши резервные копии, используя cron:

    crontab -e

    Добавьте следующую строку, чтобы запускать скрипт каждый день в 2 утра:

    0 2 * * * /usr/bin/python3 /path/to/your-backup-script.py

Восстановление из резервной копии

Для восстановления из резервной копии вам нужно будет выполнить следующие действия:

  1. Распакуйте резервную копию (если вы использовали tar):

    tar -xvzf nexus-backup.tar.gz -C /nexus-data
  2. Перезапустите Nexus:
    После восстановления данных перезапустите Nexus, чтобы изменения вступили в силу.

    systemctl restart nexus
  3. Проверка восстановления:
    Убедитесь, что восстановленные репозитории работают правильно, проверив их через веб-интерфейс Nexus.

Следуя вышеописанным шагам, вы сможете наладить процесс резервного копирования и восстановления для конкретных репозиториев в Nexus Repository Manager.

Оцените материал
Добавить комментарий

Капча загружается...