Maven Deploy на Nexus

Maven Deploy to Nexus

1. обзор

Вa previous article я обсуждал, как проект Maven может установить локально стороннюю банку, которая еще не была развернута в Maven Central (или в любом другом крупном и публично размещенном репозитории).

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

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

В этой статье будет показано, как развернуть артефакты проектаto Nexus, with Maven.

2. Требования Nexus вpom.xml

Чтобы Maven мог развертывать артефакты, которые он создает на этапе сборкиpackage, ему необходимо определить информацию о репозитории, в которой будут развертываться упакованные артефакты, через элементdistributionManagement:с


   
      nexus-snapshots
      http://localhost:8081/nexus/content/repositories/snapshots
   

Размещенный общедоступный репозиторийSnapshots готов к работе на Nexus, поэтому нет необходимости создавать или настраивать что-либо еще. Nexus позволяет легко определять URL-адреса своих размещенных репозиториев - каждый репозиторий отображает точную запись, которая будет добавлена ​​в<distributionManagement> проекта pom на вкладкеSummary.

3. Плагины

По умолчанию Maven обрабатывает механизм развертывания черезmaven-deploy-plugin - это сопоставлено с фазойdeployment жизненного цикла Maven по умолчанию:


   maven-deploy-plugin
   2.8.1
   
      
         default-deploy
         deploy
         
            deploy
         
      
   

maven-deploy-plugin - это жизнеспособный вариант для решения задачи развертывания артефактов проекта в Nexus, но он не был создан для того, чтобы в полной мере использовать то, что Nexus может предложить. Из-за этого Sonatype создал специальный плагин для Nexus -nexus-staging-maven-plugin - который на самом деле разработан, чтобы в полной мере использовать более продвинутые функциональные возможности, которые может предложить Nexus, - такие как постановка.

Хотя для простого процесса развертывания нам не требуется промежуточная функциональность, мы продолжим работу с этим нестандартным плагином Nexus, поскольку он был создан с явной целью хорошо общаться с Nexus.

Единственная причина использоватьmaven-deploy-plugin - оставить открытой возможность использования альтернативы Nexus в будущем - например, репозиторияArtifactory. Однако, в отличие от других компонентов, которые могут фактически меняться на протяжении жизненного цикла проекта, менеджер хранилища Maven вряд ли изменится, поэтому гибкость не требуется.

Итак, первый шаг в использовании другого плагина развертывания на этапе развертывания - отключение существующего сопоставления по умолчанию:


   org.apache.maven.plugins
   maven-deploy-plugin
   ${maven-deploy-plugin.version}
   
      true
   

Теперь мы можем определить:


   org.sonatype.plugins
   nexus-staging-maven-plugin
   1.5.1
   
      
         default-deploy
         deploy
         
            deploy
         
      
   
   
      nexus
      http://localhost:8081/nexus/
      true
   

Цель плагинаdeploy отображается на фазуdeploy сборки Maven.

Также обратите внимание, что, как обсуждалось, нам не нужны промежуточные функциональные возможности при простом развертывании артефактов-SNAPSHOT в Nexus, поэтому они полностью отключаются с помощью элемента<skipStaging>.

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

4. Глобальныйsettings.xml

Развертывание в Nexus - этоsecured operation - и пользовательdeployment существует для этой цели из коробки на любом экземпляре Nexus.

Настроить Maven с учетными данными этого пользователяdeployment, чтобы он мог правильно взаимодействовать с Nexus, нельзя выполнить вpom.xml проекта. Это связано с тем, что синтаксисpom не позволяет этого, не говоря уже о том, чтоpom может быть общедоступным артефактом, поэтому не очень подходит для хранения информации об учетных данных.

Учетные данные сервера должны быть определены в глобальном Mavensetting.xml:


   
      nexus-snapshots
      deployment
      the_pass_for_the_deployment_user
   

Сервер также может быть настроен на использование безопасности на основе ключей вместо необработанных и незашифрованных учетных данных.

5. Процесс развертывания

Выполнение процесса развертывания является простой задачей:

mvn clean deploy -Dmaven.test.skip=true

Пропуск тестов - это нормально в контексте задания развертывания, потому что это задание должно быть последним заданием изdeployment pipeline для проекта.

Типичным примером такого конвейера развертывания может быть последовательность заданий Jenkins, каждое из которых запускает следующее, только если оно успешно завершается. Таким образом, предыдущие задачи в конвейере несут ответственность за запуск всех наборов тестов из проекта - к моменту запуска задания развертывания все тесты уже должны пройти.

Если запущена одна команда, тесты могут оставаться активными до выполнения фазыdeployment:

mvn clean deploy

6. Заключение

Это простое, но очень эффективное решение для развертывания артефактов Maven на Nexus.

Это также несколько самоуверенно -nexus-staging-maven-plugin используется вместоmaven-deploy-plugin по умолчанию; функциональность постановки отключена и т. д. - именно эти варианты делают решение простым и практичным.

Потенциальная активация полной функциональности постановки может быть темой будущей статьи.

Наконец, мы обсудим процесс выпуска в следующей статье.