Maven релиз для Nexus

Maven релиз для Nexus

1. обзор

В предыдущей статье этой серии мы настроилиdeployment process with Maven to Nexus. В этой статье мы настроимRelease Process with Maven - как вpom проекта, так и в задании Jenkins.

2. Репозиторий вpom

Чтобы Maven мог выпускаться на сервер репозитория Nexus, нам нужно передать информациюdefine the repository через элементdistributionManagement:


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

Хостинг Releases Repository поставляется из коробки на Nexus, поэтому нет необходимости создавать его явно.

3. SCM в Mavenpom

Процесс выпуска будет взаимодействовать с системой контроля версий проекта - это означает, что нам сначала нужно определить элемент<scm> в нашемpom.xml:


   scm:git:https://github.com/user/project.git
   http://github.com/user/project
   scm:git:https://github.com/user/project.git

Или, используя протокол git:


   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git
   scm:git:[email protected]:user/project.git

4. Плагин выпуска

Стандартный плагин Maven, используемый процессом выпуска, - этоmaven-release-plugin - конфигурация для этого плагина минимальна:


   org.apache.maven.plugins
   maven-release-plugin
   2.4.2
   
      [email protected]{project.version}
      true
      releases
   

Здесь важно то, что конфигурацияreleaseProfiles фактически заставит профиль Maven - профильreleases - стать активным во время процесса выпуска.

Именно в этом процессеnexus-staging-maven-plugin используется для развертывания в репозитории Nexusnexus-releases:


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

Плагин настроен на выполнение процесса выпускаwithout the staging mechanism, так же какpreviously, для процесса развертывания (skipStaging=true).

А также аналогично процессу развертывания,Releasing to Nexus is a secured operation - поэтому мы снова будем использовать нестандартную пользовательскую форму Nexusdeployment.

Нам также необходимо настроить учетные данные для сервераnexus-releases в глобальномsettings.xml (%USER_HOME%/.m2/settings.xml):


   
      nexus-releases
      deployment
      the_pass_for_the_deployment_user
   

Это полная конфигурация

5. Процесс выпуска

Давайте разберем процесс выпуска на мелкие и целенаправленные шаги. Мы выполняем Release, когда текущая версия проекта является версией SNAPSHOT - скажем,0.1-SNAPSHOT.

5.1. Релиз: Чистый

Cleaning a Release:

  • удалить дескриптор выпуска (release.properties)

  • удалить любые резервные файлы POM

5.2. релиз: подготовка

Следующая часть процесса выпуска -Preparing the Release; это будет:

  • выполнить некоторые проверки - не должно быть никаких незавершенных изменений, и проект должен зависеть от SNAPSHOT-зависимостей

  • изменить версию проекта в pom-файле на полный номер выпуска (удалить суффикс SNAPSHOT) - в нашем примере -0.1

  • запустить проектtest suites

  • зафиксировать и подтолкнуть изменения

  • создатьtag из этого не-SNAPSHOT версионного кода

  • increase the version проекта в pom - в нашем примере -0.2-SNAPSHOT

  • зафиксировать и подтолкнуть изменения

5.3. релиз: выполнить

Последняя часть процесса выпуска -Performing the Release; это будет:

  • Оформить заказ на выпуск тега от СКМ

  • создать и развернуть выпущенный код

Этот второй шаг процесса зависит от результата шага Prepare -release.properties.

6. О Дженкинсе

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

Существующие плагины Jenkins, ориентированные на процесс выпуска:

Однако, поскольку команда Maven для выполнения выпуска достаточно проста, мы можем просто определить стандартное задание Jenkins для выполнения операции - никаких плагинов не требуется.

Итак, для нового задания Jenkins (создание проекта maven2 / 3) мы определим 2 строковых параметра:releaseVersion=0.1 иdevelopmentVersion=0.2-SNAPSHOT.

В разделе конфигурацииBuild мы можем просто настроить запуск следующей команды Maven:

Release:Clean release:prepare release:perform
   -DreleaseVersion=${releaseVersion} -DdevelopmentVersion=${developmentVersion}

При запуске параметризованного задания Jenkins предложит пользователю указать значения для этих параметров, поэтому каждый раз, когда мы запускаем задание, нам нужно вводить правильные значения дляreleaseVersion иdevelopmentVersion.

Кроме того, стоит использоватьWorkspace Cleanup Plugin и проверить параметрDelete workspace before build starts для этой сборки. Однако имейте в виду, что шагperform выпуска должен обязательно запускаться той же командой, что и шагpreparestep - это потому, что последний шагperform будет использоватьrelease.properties файл, созданныйprepare. Это означает, что у нас не может быть задания Jenkins, выполняющегоprepare, и другого, выполняющегоperform.

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

В этой статье показано, как реализовать процессReleasing a Maven project с Jenkins или без него. Подобноto Deployment, этот процесс используетnexus-staging-maven-plugin для взаимодействия с Nexus и фокусируется на проекте git.