Перейти к основному содержимому

Выпуск Maven для Nexus

· 4 мин. чтения

Задача: Наибольшая подстрока без повторений

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

ANDROMEDA 42

1. Обзор

В предыдущей статье этой серии мы настроили процесс развертывания с Maven на Nexus . В этой статье мы настроим процесс выпуска с помощью Maven — как в pom проекта, так и в задании Jenkins.

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

Чтобы Maven мог выпустить релиз на сервер репозитория Nexus, нам нужно определить информацию о репозитории с помощью элемента DistributionManagement :

<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://localhost:8081/nexus/content/repositories/releases</url>
</repository>
</distributionManagement>

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

3. SCM в Maven pom

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

<scm>
<connection>scm:git:https://github.com/user/project.git</connection>
<url>http://github.com/user/project</url>
<developerConnection>scm:git:https://github.com/user/project.git</developerConnection>
</scm>

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

<scm>
<connection>scm:git:git@github.com:user/project.git</connection>
<url>scm:git:git@github.com:user/project.git</url>
<developerConnection>scm:git:git@github.com:user/project.git</developerConnection>
</scm>

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

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

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<tagNameFormat>v@{project.version}</tagNameFormat>
<autoVersionSubmodules>true</autoVersionSubmodules>
<releaseProfiles>releases</releaseProfiles>
</configuration>
</plugin>

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

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

<profiles>
<profile>
<id>releases</id>
<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.5.1</version>
<executions>
<execution>
<id>default-deploy</id>
<phase>deploy</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
<configuration>
<serverId>nexus-releases</serverId>
<nexusUrl>http://localhost:8081/nexus/</nexusUrl>
<skipStaging>true</skipStaging>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>

Плагин настроен на выполнение процесса Release без промежуточного механизма , как и ранее , для процесса Deployment ( skipStaging=true ).

Как и в случае с процессом развертывания, выпуск в Nexus — это защищенная операция , поэтому мы снова будем использовать пользовательскую форму Nexus для развертывания «из коробки».

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

<servers>
<server>
<id>nexus-releases</id>
<username>deployment</username>
<password>the_pass_for_the_deployment_user</password>
</server>
</servers>

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

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

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

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

Очистка релиза :

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

5.2. выпуск: подготовить

Следующая часть процесса релиза — подготовка релиза ; это будет:

  • выполнить некоторые проверки — не должно быть незафиксированных изменений, и проект не должен зависеть ни от каких зависимостей SNAPSHOT
  • изменить версию проекта в файле pom на полный номер релиза (убрать суффикс SNAPSHOT) — в нашем примере — 0.1
  • запустить наборы тестов проекта
  • зафиксировать и отправить изменения
  • создать тег из этого версионного кода, отличного от SNAPSHOT
  • увеличьте версию проекта в pom — в нашем примере — 0.2-SNAPSHOT
  • зафиксировать и отправить изменения

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

Последней частью процесса выпуска является выполнение выпуска ; это будет:

  • Тег выпуска оформления заказа из SCM
  • сборка и развертывание выпущенного кода

Этот второй шаг процесса зависит от выходных данных шага Prepare — release.properties .

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

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

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

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

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

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

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

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

Кроме того, стоит использовать плагин очистки рабочей области и установить флажок « Удалить рабочую область перед запуском сборки » для этой сборки. Однако имейте в виду, что шаг выполнения Release обязательно должен запускаться той же командой, что и шаг подготовки , потому что последний шаг выполнения будет использовать файл release.properties , созданный с помощью prepare . Это означает, что у нас не может быть одно задание Jenkins, работающее подготовкой , и другое выполнение .

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

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