Вопрос или проблема
Я использую 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
Восстановление из резервной копии
Для восстановления из резервной копии вам нужно будет выполнить следующие действия:
-
Распакуйте резервную копию (если вы использовали
tar
):tar -xvzf nexus-backup.tar.gz -C /nexus-data
-
Перезапустите Nexus:
После восстановления данных перезапустите Nexus, чтобы изменения вступили в силу.systemctl restart nexus
- Проверка восстановления:
Убедитесь, что восстановленные репозитории работают правильно, проверив их через веб-интерфейс Nexus.
Следуя вышеописанным шагам, вы сможете наладить процесс резервного копирования и восстановления для конкретных репозиториев в Nexus Repository Manager.