Sonatype nexus что это
Как создать APT репозиторий в Sonatype Nexus 3?
Авторизуйтесь
Как создать APT репозиторий в Sonatype Nexus 3?
Что такое Sonatype Nexus 3?
Sonatype Nexus 3 — это свободно распространяемый менеджер репозиториев, с удобным web-интерфейсом. Менеджер позволяет создавать репозитории, как для хранения конкретных форматов данных (yum, apt, Maven, Docker, npm, PyPl и так далее), так и формат хранения файлов Raw, в котором можно хранить любые типы файлов.
Менеджер репозиториев можно установить, как на обычную физическую или виртуальную машину, так и развернуть в docker-контейнере. Я разворачивал Nexus в docker-контейнере, поэтому буду описывать, как поднять APT репозиторий именно в docker. Доступные docker-образы Sonatype Nexus 3 можно найти по этой ссылке.
Установка зависимостей
Первое что нужно сделать, это подключиться к docker-контейнеру с оболочкой bash:
После этого нужно установить пакет pinentry, для того, чтобы можно было дальше сгенерировать ключи для apt репозитория:
Генерация ключей
После установки пакета pinentry, можно приступать к созданию ключей:
Заполняем поля, вводим O и нажимаем Enter. Далее нужно будет ввести 2 раза пароль, для генерации ключа. Копируем ID, который был сгенерирован 6C44AA9D06EA1B2E805C90FF6935F7FB57FFEF6F. Создаём открытый ключ:
Создаём закрытый ключ:
Здесь нужно будет ввести пароль, который вводили при генерации ID.
Выводим содержимое файла, который был сгенерирован при создание закрытого ключа. Копируем содержимое файла.
Создание APT репозитория
Заходим в web-интерфейс менеджера репозиториев Nexus http://10.10.1.1:8080. Авторизуемся с правами администратора и нажимаем на шестерёнку вверху. Далее выбираем раздел Repositories. Нажимаем Create repository и выбираем apt(hosted):
Создание APT репозитория
Далее заполняем поля и вставляем в поле Signing Key содержимое из файла private.gpg.key:
Вставляем закрытый ключ
В поле Passphrase вводим пароль, который вводили при генерации ID и закрытого ключа. Нажимаем Create repository. После этого будет создан репозиторий APT, в который можно загружать deb-файлы и подключать к Debian/Ubuntu или подобным ОС.
Повторное использование приватных Android библиотек с помощью Sonatype Nexus Repository OSS
Думаю, что у многих возникала необходимость повторно использовать отдельные модули своего Android приложения в другом проекте. Для решения этой задачи есть простые пути, например, публично разместить Android библиотеку с помощью JitPack. Решение отличное, но если нужно разместить библиотеку приватно, то придется заплатить, а тариф чаще всего будет зависеть от количества размещаемых артефактов. Данное решение подойдет далеко не всем.
Ниже я предложу простой вариант решения данной проблемы с использованием Sonatype Nexus Repository OSS.
Введение
Статья не претендует на полноту и отражает лишь базовое решение. В итоге в вашем распоряжении будет установленное ПО для управления артефактами на стороне какого-либо хоста, скрипт для публикации Android библиотеки, возможность реализовать зависимости в своём приложении из локального maven репозитория. Возможно, публикации подобного рода уже есть на Хабре, но понятного туториала для Android разработчика я не нашел, что и побудило меня поделиться с вами информацией. Буду рад, если она окажется действительно полезной в работе.
Шаг 1. Подготовка
Для начала необходимо определиться с тем куда устанавливать Nexus. Логично, если это будет сервер, к которому у вас всегда будет доступ при разработке. В данной статье мы будем устанавливать Nexus на тот же хост, на котором ведем разработку. Отличия при установке на сервер будут лишь в ip адресе, по которому мы будем обращаться к репозиториям.
Перед установкой Nexus, нужно скачать и установить JRE. Подойдёт только Oracle JRE и только версии 1.8 (пробовал на 10, но Nexus ругался), это явно указано в документации. Не забудьте добавить в PATH путь к исполняемым файлам JRE.
Далее нужно скачать Nexus с официального сайта. На момент написания статьи это версия 3.12
Шаг 2. Установка и настройка Nexus
Скачанный архив достаточно распаковать там, где вам удобно. После чего можно запускать программу и начинать работать. Для долгосрочного и удобного использования нужно зарегистрировать Nexus как службу и запускать её при старте ОС. Как это сделать — достаточно понятно описано в документации. В нашем же случае достаточно перейти в папку » nexus-3.12/bin/ » и запустить из командной строки файл nexus.
В случае c Windows:
В результате вы должны увидеть оповещение об успешном старте, выглядит оно примерно так:
Пришло время проверить работоспособность Nexus. Для этого достаточно перейти по ссылке http://localhost:8081. Как вы понимаете, в случае с сервером вместо » localhost » нужно указать ip адрес вашего сервера, а Nexus для работы использует порт 8081. Вы увидите такую страницу:
Первым делом нужно авторизоваться, жмём » Sign in » справа вверху и вводим логин ( admin ) и пароль ( admin123 ) администратора. После этого появляется иконка шестеренки, по нажатию на которую мы попадём в настройки.
Но перед тем, как перейти к описанию репозиториев, стоит сделать основные настройки для пользователей. Перейдем в раздел » Roles «.
Помимо роли администратора и анонимного пользователя я предлагаю выделить роли типа » Downloader » — для загрузки зависимостей в проекты, » Contributor » — для отправки библиотек в Nexus.
Жмем «Create role», затем выбираем «Nexus role», вводим данные для «Downloader» как на скрине ниже:
О том, какие привилегии за что отвечают — подробно описано в документации. Нам нужно выбрать привилегию с флагом » repository-view » (отвечает за работу с данными именно репозиториев), привилегия должна также давать право на чтение данных репозитория, это флаг » read «, и так как в Android мы работаем с maven репозиториями, то стоит остановиться на флаге » maven2 «, чтобы не давать пользователю работать с другими типами репозиториев. Жмём » Create role «.
По аналогии создаем роль » Contributor «. Разница лишь в том, что право чтения унаследуем от роли » Downloader » (настройка в нижней части страницы), а руками дадим привилегии на редактирование, добавление артефактов в репозитории, а также на просмотр данных репозиториев через web интерфейс.
Далее создадим пользователей, которым назначим настроенные роли. Заходим в раздел » Users » (в левой части окна) и нажимаем » Create local user «. Для проверки можно задать пароли аналогичные стандартному паролю админа, то есть » downloader123 » и » contributor123 «. Образец заполнения на скрине:
Так как наша цель — приватная работа, то стоит отключить доступ к данным репозиториев для анонимных пользователей, для этого заходим в пользователя » anonimous » и меняем его статус с » Active » на » Disabled «. В этом случае нельзя будет анонимно получить зависимости в Android проекте, а только с указанием определенного пользователя и пароля, но скачивать данные через web интерфейс всё ещё будет возможно.
Для того, чтобы запретить просматривать содержимое репозиториев через web интерфейс анонимным пользователям — перейдём в раздел » Anonimous » и снимем флаг с опции » Allow anonymous users to access the server «. Не забудьте сохранить изменения.
Остался последний этап — настройка репозиториев. Переходим в раздел » Repositories » и видим там созданные по умолчанию репозитории. Среди них есть репозитории » maven2 «, если присмотреться, то можно увидеть разные типы: «proxy», «group», «hosted». «Proxy» репозиторий просто пробрасывает при обращении к себе пользователя на другой репозиторий, в случае с преднастроенным » maven-central » это отсылка на https://repo1.maven.org/maven2/, «group» может включать в себя несколько репозиториев, а «hosted» — это уже конкретный репозиторий, хранящийся в Nexus. Они-то нам сейчас и пригодятся.
Создадим репозитории для «Release» и «Snapshot» версий артефактов. Жмем » Create repository «, выбираем » maven2 (hosted) «. Первый репозиторий назовём «android» и просто сохраним не меняя настройки:
Второй репозиторий назовём «android_snapshot», поменяем » Version policy » на «Spapshot» и » Deployment policy » на «Allow redeploy».
Если не понятно на что это влияет — можно прочитать здесь. Фактически для репозитория «android» будет недоступна возможность загрузить повторно одну и ту же версию библиотеки, это привычное поведение при общении, например, с maven-central. Для репозитория «android_snapshot» наименование версии обязательно должно будет оканчиваться на «SNAPSHOT» и будет доступна загрузка одной и той же версии повторно.
Также обратите внимание на то, что в списке репозиториев есть колонка «URL» с кнопками «Copy», эти ссылки понадобятся нам в дальнейшем для доступа к репозиториям из проектов.
Поздравляю! Базовая настройка Nexus сделана, пора приступить к созданию и публикации библиотеки.
Шаг 3. Создание и публикация Android библиотеки
Создаём Android проект, назовём его «TestLibrary». Далее в «Project View» нажимаем на корень проекта правой кнопкой мыши выбираем «New» и «Module». В открывшемся окне выбираем «Android library» и называем библиотеку «HelloLibrary». В итоге вы увидите рядом с модулем «app» модуль нашей новой библиотеки.
Добавим в библиотеку класс с функцией приветствия:
Библиотека готова, пора публиковать. В «Project view» в модуль «hellolibrary» добавляем файл и называем его «publisher.gradle». В нём будет храниться скрипт для публикации библиотеки.
Далее переходим в «build.gradle» нашей библиотеки, применяем к нему наш publisher и очищаем от лишних зависимостей:
Теперь можем публиковать, просто выполнив задание » publishAndroidLibraryPublicationToMavenRepository «.
Шаг 4. Использование зависимостей из Nexus
Для теста предлагаю создать ещё один пустой Android проект.
Для начала подключим репозиторий к проекту, просто добавив данные в «build.gradle» файл уровня проекта:
А теперь как и с любой другой библиотекой получим зависимость на нашу «hellolibrary» через implementation в «build.gradle» файле уровня «app».
Теперь вы можете вызвать функцию helloFromOurLibrary() в своём Android проекте и протестировать работоспособность всей схемы. Поздравляю!
Резюме
Теперь у вас есть возможность повторно использовать приватные Android библиотеки в проектах. Жду замечаний!
Надеюсь вы не зря потратили своё время, спасибо!
В чем разница между Nexus и Maven?
Nexus управляет программными «артефактами», необходимыми для разработки. Если вы разрабатываете программное обеспечение, ваши сборки могут загружать зависимости из Nexus и публиковать артефакты в Nexus, создавая новый способ обмена артефактами внутри организации. Хотя центральный репозиторий всегда служил большим удобством для разработчиков, вам не следует обращаться к нему напрямую. Вы должны проксировать Central с Nexus и поддерживать свои собственные репозитории, чтобы обеспечить стабильность в вашей организации. С помощью Nexus вы можете полностью контролировать доступ и развертывание каждого артефакта в вашей организации из одного места.
А вот цитата из « Maven и Nexus Pro, созданные друг для друга », объясняющая, как Maven использует репозитории:
Maven использует концепцию репозитория, извлекая артефакты, необходимые для создания приложения, и развертывая результат процесса сборки в репозитории. Maven использует концепцию структурированных репозиториев, поэтому компоненты могут быть извлечены для поддержки сборки. Эти компоненты или зависимости включают библиотеки, фреймворки, контейнеры и т. Д. Maven может идентифицировать компоненты в репозиториях, понимать их зависимости, извлекать все, что необходимо для успешной сборки, и развертывать свои выходные данные обратно в репозитории после завершения сборки.
Итак, если вы хотите использовать оба, у вас будет репозиторий, управляемый Nexus, и Maven получит доступ к этому репозиторию.
Nexus: установка, запуск, деплой в репозиторий + NGINX и SSL
У Android-команды поломался “деплой” через отправку письма с вложением на Gmail (было сделано ещё до меня), и появилась необходимость быстренько “накостылить” репозиторий.
Планировался он давно, но сейчас будет без всякой автоматизации – просто руками поднять, запустить, что бы они могли деплоить.
Запуск Nexus из Docker
Обновляем систему, устанавливаем NGINX, и пока его стопаем:
Делаем тестовый запуск Nexus:
Дефолтный логин-пасс – admin:admin123, можно зайти, посмотреть как всё выглядит под админом:
Добавление репозитория
Добавляем репозиторий – переходим в Repositories:
Кликаем Create repository, выбираем raw(hosted) (см. описание тут>>>):
Попробуем в него загрузить файл.
Выбираем POST /v1/components, жмём Try it out, указываем что и куда будем загружать, нам тут интересен Request URL:
Sonatype Nexus
Менеджер репозиториев для локального хранения и управления артефактами, зависимостями и Docker-образами.
подходящих зависимостей на старте проекта.
зависимостей на уязвимости перед вводом новых
компонентов в цепочку разработки.
Какие бизнес-задачи можно решать
Снижение рисков финансовых и репутационных потерь при возможной компрометации данных и\или остановке сервисов из-за взлома приложений через уязвимые сторонние компоненты.
Sonatype Nexus позволяет проксировать, собирать и управлять зависимостями без постоянного обращения к внешним хранилищам бинарных JAR-артефактов.
Особенности
Выбор подходящих зависимостей на старте проекта
Жизненный цикл Nexus позволяет в режиме реального времени получить представление о качестве компонентов и принять оптимальное решение о том, какие зависимости включать в ваши приложения.
Внутренние инструменты для обеспечения безопасности разработки
Контроль качества исходников
Богатый и гибкий механизм настройки политик
Проверка зависимостей на уязвимости перед вводом новых компонентов в цепочку разработки
Точная информация по
использованию зависимостей
с подробными отчетами
Нужна помощь или совет?
У вас есть вопрос? Не уверены что именно вам нужно? Вам необходимо независимое экспертное мнение по информационной безопасности в бизнес терминах?
В рамках бесплатной 30-минутной консультации, ответим на любые ваши вопросы