«1. Обзор

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

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

Чтобы 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

Процесс выпуска будет взаимодействовать с системой управления версиями проекта — это означает, что нам сначала нужно определить элемент \u003cscm\u003e в нашем 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:[email protected]:user/project.git</connection>
   <url>scm:git:[email protected]:user/project.git</url>
   <developerConnection>scm:git:[email protected]: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>[email protected]{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 без промежуточного механизма , как и раньше, для процесса развертывания (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:Clean

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

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

5.2. release:prepare

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

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

5.3. release:perform

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

    получение тега выпуска из сборки SCM и развертывание выпущенного кода

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

6. В Jenkins

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

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

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

Однако, поскольку команда 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, созданный подготовкой. Это означает, что у нас не может быть одно задание Jenkins, выполняющее подготовку, а другое выполняющееся выполнение.

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

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