sonatype nexus что это

Повторное использование приватных 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. Они-то нам сейчас и пригодятся.

Читайте также:  xsd minoccurs 0 что это

Создадим репозитории для «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 Sonatype используя подход infrastructure as code

Sonatype Nexus – интегрированная платформа, с помощью которой разработчики могут проксировать, хранить и управлять зависимостями Java (Maven), образами Docker, Python, Ruby, NPM, Bower, RPM-пакетами, gitlfs, Apt, Go, Nuget, а также распространять свое программное обеспечение.

Зачем нужен Sonatype Nexus?

Артефакты поддерживаемые в базовой поставке Sonatype Nexus:

Артефакты поддерживаемые сообществом:

Установка Sonatype Nexus используя https://github.com/ansible-ThoTeam/nexus3-oss

Требования

Пример ansible-playbook для установки nexus без LDAP с репозиториями Maven (java), Docker, Python, Ruby, NPM, Bower, RPM и gitlfs.

Скриншоты:

Переменные роли

Role Variables

Переменные со значениями по умолчанию (см. default/main.yml ):

General variables

Если вы измените версию на более новую, то роль попытается обновить ваш установленный Nexus.

Если вы используете более старую версию Nexus, чем последняя, вы должны убедиться, что не используете функции, которые недоступны в установленном выпуске (например, размещенние yum репозиториев доступно для nexus больше чем 3.8.0, git lfs repo для nexus больше чем 3.3.0 и т. д.)

nexus timezone — это имя часового пояса Java, которое может быть полезно в сочетании с приведенными ниже выражениями cron для nexus_scheduled tasks.

Порт Nexus и контекстный путь

Пользователь и группа ОС Nexus

Пользователь и группа, используемые для владения файлами Nexus и запуска службы, будут созданы ролью, если она отсутствует.

Разрешить изменять домашний каталог по умолчанию для пользователя nexus

Каталоги экземпляров Nexus

Настройка использование памяти Nexus JVM

Это настройки по умолчанию для Nexus. Пожалуйста, не изменяйте эти значения Если вы не прочитали раздел памяти системных требований nexus и не понимаете, что они делают.

Как второе предупреждение, вот выдержка из вышеупомянутого документа:

Не рекомендуется увеличивать память JVM heap больше рекомендуемых значений в попытке повысить производительность. Это на самом деле может иметь противоположный эффект, приводя к ненужной работе операционной системы.

Пароль администратора

Пароль учетной записи «admin» для настройки. Это работает только при первой установке по умолчанию. Пожалуйста, смотрите [Изменить пароль администратора после первой установки](# change-admin-password-after-first-install), если вы хотите изменить его позже с помощью роли.

Настоятельно не рекомендуется хранить свой пароль в виде открытого текста в playbook, а использовать [шифрование ansible-vault] (https://docs.ansible.com/ansible/latest/user_guide/vault.html) (либо встроенный или в отдельный файл, загруженный, например, с помощью include_vars)

Анонимный доступ по умолчанию

Анонимный доступ по умолчанию вылючен. Подробнее про анонимный доступ.

Публичное имя хоста

Полное доменное имя и схема (https или http), по которой экземпляр Nexus будет доступен для его клиентов.

Доступ API для этой роли

Эти переменные контролируют, как роль подключается к API Nexus для предоставления.
Только для продвинутых пользователей. Скорее всего, вы не хотите изменять эти настройки по умолчанию

Настройка обратного прокси

С httpd_copy_ssl_files: true (по умолчанию) вышеупомянутые сертификаты должны существовать в вашей директории playbook и будут скопированы на сервер и настроены в apache.

Читайте также:  адаптивный фитнес что это

Если вы хотите использовать существующие сертификаты на сервере, установите httpd_copy_ssl_files: false и предоставьте следующие переменные:

httpd_ssl_cert_chain_file_location является необязательным и должен быть оставлен неустановленным, если вы не хотите настраивать файл цепочки

Установить адрес электронной почты администратора по умолчанию

Конфигурация LDAP

Соединения LDAP и область безопасности по умолчанию отключены

Соединения LDAP, каждый элемент выглядит следующим образом:

Пример конфигурации LDAP для анонимной аутентификации (анонимная привязка), это также «минимальная» конфигурация:

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA):

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, сопоставленные как роли:

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, динамически сопоставленные как роли:

Привилегии

Список привилегий для настройки. Посмотрите документацию и графический интерфейс, чтобы проверить, какие переменные должны быть установлены в зависимости от типа привилегии.

Эти элементы объединяются со следующими значениями по умолчанию:

Роли (внутри Nexus имеется виду)

Список ролей для настройки.

Пользователи

Local (non-LDAP) users/accounts list to create in nexus.

Список локальных (не LDAP) пользователей/учетных записей для создания в Nexus.

Маппинг Ldap пользователей/ролей. Состояние absent удалит роли из существующего пользователя, если он уже существует.
Пользователи Ldap не удаляются. Попытка установить роль для несуществующего пользователя приведет к ошибке.

Селекторы контента

Для получения дополнительной информации о селекторе контента см. Документацию.

Чтобы использовать селектор контента, добавьте новую привилегию с type: repository-content-selector и соответствующим contentSelector

Blobstores и репозитории

Delete the repositories from the nexus install initial default configuration. This step is only executed on first-time install (when nexus_data_dir has been detected empty).

Удаление репозиториев из исходной конфигурации по умолчанию для Nexus. Этот шаг выполняется только при первой установке (когда nexus_data_dir пустой).

Blobstores to create. A blobstore path and a repository blobstore cannot be updated after initial creation (any update here will be ignored on re-provisionning).

Configuring blobstore on S3 is provided as a convenience and is not part of the automated tests we run on travis. Please note that storing on S3 is only recommended for instances deployed on AWS.

Cоздание Blobstores. Путь к хранилищу и репозиторию хранилищ не могут быть обновлены после первоначального создания (любое обновление здесь будет игнорироваться при повторной установке).

Настройка хранилища BLOB-объектов на S3 предоставляется для удобства. Обратите внимание, что хранение на S3 рекомендуется только для экземпляров, развернутых на AWS.

Выше пример конфигурации прокси-сервер Maven.

Maven hosted repositories configuration. Negative cache config is optionnal and will default to the above values if omitted.

Конфигурация размещенных (hosted) репозиториев Maven. Конфигурация отрицательного кэша (-1) является необязательной и будет по умолчанию использовать вышеуказанные значения, если не указана.

Все три типа репозитория объединяются со следующими значениями по умолчанию:

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS and yum repository types:
see defaults/main.yml for these options:

Хранилища Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum по умолчанию выключены:
Смотрите defaults/main.yml для этих опций:

Обратите внимание, что вам может потребоваться включить определенные области безопасности, если вы хотите использовать другие типы репозиториев, кроме maven. Это по умолчанию false

Remote User Realm также может быть включена с помощью

и заголовок может быть настроен путем определения

Запланированные задачи

Запланированные задачи для настройки. typeId и специфичные для задачи taskProperties / booleanTaskProperties можно угадать либо:

Свойства задачи должны быть объявлены в правильном блоке yaml в зависимости от их типа:

Резервные копии

Если вы хотите ротировать/удалять резервные копии, установите nexus_backup_rotate: true и настройте количество бекапов, которое вы хотели бы сохранить с помощью nexus_backup_keep_rotations (по умолчанию 4).

Процедура восстановления

Удаление nexus

Предупреждение: это полностью удалит текущие данные. Обязательно сделайте резервную копию ранее, если это необходимо

Изменить пароль администратора после первой установки

Если вы хотите изменить пароль администратора после первой установки, вы можете временно изменить его на старый пароль из командной строки. После изменения nexus_admin_password в вашей игровой книге вы можете запустить:

Источник

Установка и настройка Nexus Sonatype используя подход infrastructure as code

Категории

Свежие записи

Наши услуги

Sonatype Nexus – интегрированная платформа, с помощью которой разработчики могут проксировать, хранить и управлять зависимостями Java (Maven), образами Docker, Python, Ruby, NPM, Bower, RPM-пакетами, gitlfs, Apt, Go, Nuget, а также распространять свое программное обеспечение.

Зачем нужен Sonatype Nexus?

Артефакты поддерживаемые в базовой поставке Sonatype Nexus:

Артефакты поддерживаемые сообществом:

Установка Sonatype Nexus используя https://github.com/ansible-ThoTeam/nexus3-oss

Требования

Пример ansible-playbook для установки nexus без LDAP с репозиториями Maven (java), Docker, Python, Ruby, NPM, Bower, RPM и gitlfs.

Скриншоты:

Переменные роли

Role Variables

Переменные со значениями по умолчанию (см. default/main.yml ):

General variables

Если вы измените версию на более новую, то роль попытается обновить ваш установленный Nexus.

Если вы используете более старую версию Nexus, чем последняя, вы должны убедиться, что не используете функции, которые недоступны в установленном выпуске (например, размещенние yum репозиториев доступно для nexus больше чем 3.8.0, git lfs repo для nexus больше чем 3.3.0 и т. д.)

nexus timezone — это имя часового пояса Java, которое может быть полезно в сочетании с приведенными ниже выражениями cron для nexus_scheduled tasks.

Порт Nexus и контекстный путь

Пользователь и группа ОС Nexus

Пользователь и группа, используемые для владения файлами Nexus и запуска службы, будут созданы ролью, если она отсутствует.

Читайте также:  астафируллагь что значит слово

Разрешить изменять домашний каталог по умолчанию для пользователя nexus

Каталоги экземпляров Nexus

Настройка использование памяти Nexus JVM

Это настройки по умолчанию для Nexus. Пожалуйста, не изменяйте эти значения Если вы не прочитали раздел памяти системных требований nexus и не понимаете, что они делают.

Как второе предупреждение, вот выдержка из вышеупомянутого документа:

Не рекомендуется увеличивать память JVM heap больше рекомендуемых значений в попытке повысить производительность. Это на самом деле может иметь противоположный эффект, приводя к ненужной работе операционной системы.

Пароль администратора

Пароль учетной записи «admin» для настройки. Это работает только при первой установке по умолчанию. Пожалуйста, смотрите [Изменить пароль администратора после первой установки](# change-admin-password-after-first-install), если вы хотите изменить его позже с помощью роли.

Настоятельно не рекомендуется хранить свой пароль в виде открытого текста в playbook, а использовать [шифрование ansible-vault] ( https://docs.ansible.com/ansible/latest/user_guide/vault.html ) (либо встроенный или в отдельный файл, загруженный, например, с помощью include_vars)

Анонимный доступ по умолчанию

Публичное имя хоста

Полное доменное имя и схема (https или http), по которой экземпляр Nexus будет доступен для его клиентов.

Доступ API для этой роли

Эти переменные контролируют, как роль подключается к API Nexus для предоставления.
Только для продвинутых пользователей. Скорее всего, вы не хотите изменять эти настройки по умолчанию

Настройка обратного прокси

С httpd_copy_ssl_files: true (по умолчанию) вышеупомянутые сертификаты должны существовать в вашей директории playbook и будут скопированы на сервер и настроены в apache.

Если вы хотите использовать существующие сертификаты на сервере, установите httpd_copy_ssl_files: false и предоставьте следующие переменные:

httpd_ssl_cert_chain_file_location является необязательным и должен быть оставлен неустановленным, если вы не хотите настраивать файл цепочки

Установить адрес электронной почты администратора по умолчанию

Конфигурация LDAP

Соединения LDAP и область безопасности по умолчанию отключены

Пример конфигурации LDAP для анонимной аутентификации (анонимная привязка), это также «минимальная» конфигурация:

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA):

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, сопоставленные как роли:

Пример конфигурации LDAP для простой аутентификации (с использованием учетной записи DSA) + группы, динамически сопоставленные как роли:

Привилегии

Список привилегий для настройки. Посмотрите документацию и графический интерфейс, чтобы проверить, какие переменные должны быть установлены в зависимости от типа привилегии.

Эти элементы объединяются со следующими значениями по умолчанию:

Роли (внутри Nexus имеется виду)

Список ролей для настройки.

Пользователи

Local (non-LDAP) users/accounts list to create in nexus.

Список локальных (не LDAP) пользователей/учетных записей для создания в Nexus.

Маппинг Ldap пользователей/ролей. Состояние absent удалит роли из существующего пользователя, если он уже существует.
Пользователи Ldap не удаляются. Попытка установить роль для несуществующего пользователя приведет к ошибке.

Селекторы контента

Чтобы использовать селектор контента, добавьте новую привилегию с type: repository-content-selector и соответствующим contentSelector

Blobstores и репозитории

Delete the repositories from the nexus install initial default configuration. This step is only executed on first-time install (when nexus_data_dir has been detected empty).

Удаление репозиториев из исходной конфигурации по умолчанию для Nexus. Этот шаг выполняется только при первой установке (когда nexus_data_dir пустой).

Blobstores to create. A blobstore path and a repository blobstore cannot be updated after initial creation (any update here will be ignored on re-provisionning).

Configuring blobstore on S3 is provided as a convenience and is not part of the automated tests we run on travis. Please note that storing on S3 is only recommended for instances deployed on AWS.

Настройка хранилища BLOB-объектов на S3 предоставляется для удобства. Обратите внимание, что хранение на S3 рекомендуется только для экземпляров, развернутых на AWS.

Выше пример конфигурации прокси-сервер Maven.

Maven hosted repositories configuration. Negative cache config is optionnal and will default to the above values if omitted.

Конфигурация размещенных (hosted) репозиториев Maven. Конфигурация отрицательного кэша (-1) является необязательной и будет по умолчанию использовать вышеуказанные значения, если не указана.

Все три типа репозитория объединяются со следующими значениями по умолчанию:

Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS and yum repository types:
see defaults/main.yml for these options:

Хранилища Docker, Pypi, Raw, Rubygems, Bower, NPM, Git-LFS и yum по умолчанию выключены:
Смотрите defaults/main.yml для этих опций:

Обратите внимание, что вам может потребоваться включить определенные области безопасности, если вы хотите использовать другие типы репозиториев, кроме maven. Это по умолчанию false

Remote User Realm также может быть включена с помощью

и заголовок может быть настроен путем определения

Запланированные задачи

Запланированные задачи для настройки. typeId и специфичные для задачи taskProperties / booleanTaskProperties можно угадать либо:

Свойства задачи должны быть объявлены в правильном блоке yaml в зависимости от их типа:

Резервные копии

Если вы хотите ротировать/удалять резервные копии, установите nexus_backup_rotate: true и настройте количество бекапов, которое вы хотели бы сохранить с помощью nexus_backup_keep_rotations (по умолчанию 4).

Процедура восстановления

Удаление nexus

Предупреждение: это полностью удалит текущие данные. Обязательно сделайте резервную копию ранее, если это необходимо

Изменить пароль администратора после первой установки

Если вы хотите изменить пароль администратора после первой установки, вы можете временно изменить его на старый пароль из командной строки. После изменения nexus_admin_password в вашей игровой книге вы можете запустить:

Источник

Информ портал о технике и не только