Руководство по Maven. Автоматизация развёртывания (deployment).

При разработке проекта процесс развёртывания состоит из следующих шагов:

  • Проверка всего кода проекта в системе контроля версий.
  • Скачивание всего исходного кода из системы контроля версий.
  • Сборка приложения.
  • Получение WAR или EAR файла проекта.
  • Развёртывание файла на сервере.
  • Обновление документации и обновление номера версии приложения.

Проблема

Обычно в процессе развёртывания участвуют много человек. Одна команда проверяет код вторая выполняет сборку и т.д. Если всё выполнять вручную, какой-то из моментов может быть упущен и т.д.


Решение

Здесь приходит на помощь автоматизация развёртывания с помощью комбинирования:

  • Сборки и релиза проекта с помощью Maven;
  • Использование системы контроля версий (например, Git) для работы с кодом;
  • Использования систем управления удалёнными репозиториями (например, Nexus).

Обновление pom.xml проекта

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

Файл pom.xml будет выглядеть следующим образом:


<project xmlns="http://maven.apache.org/POM/4.0.0" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
   http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>bus-core-api</groupId>
   <artifactId>mavenTutorial</artifactId>
   <version>1.0-SNAPSHOT</version>
   <packaging>jar</packaging> 
   <scm>
      <url>http://www.svn.com</url>
      <connection>scm:github:http://localhost:8080/svn/proselyte/tutorial/maven</connection>
      <developerConnection>scm:svn:${username}/${password}@localhost:8080:
      core_features:1102:code</developerConnection>
   </scm>
   <distributionManagement>
      <repository>
         <id>MavenTutorial</id>
         <name>Release repository</name>
         <url>http://localhost:8088/nexus/content/repositories/
         MavenTutorial</url>
      </repository>
   </distributionManagement>
   <build>
      <plugins>
         <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-release-plugin</artifactId>
            <version>2.0-beta-8</version>
            <configuration>
               <useReleaseProfile>false</useReleaseProfile>
               <goals>deploy</goals>
               <scmCommentPrefix>[maven-tutorial-release-checkin]-<
               /scmCommentPrefix>
            </configuration>
         </plugin>
      </plugins>
   </build>
</project>

В этом pom.xml файле мы использовали следующие важные элементы:

  • Repositories
    Место, где выполняется сборка JAR, WAR, или EAR или другие артифакты, которые будут получены в случае успешной сборки.
  • Plugin
    Элемент maven-release-plugin сконфигурирован для автоматизации процесса развёртывания.
  • SCM
    Определяет расположение системы контроля версий, в которой Maven выполнит проверку исходного кода.

С помощью maven-release-plugin Maven выполняет следующие задачи:


mvn release:clean

Выполняет “очистку” в случае, если релиз не был успешным.


mvn release:rollback

“Откатывает изменения”, которые были сделаны в коде и конфигурациях, если крайний релиз не был успешным.


mvn release:prepare

Выполняет множество операций:

  • Проверяет наличие изменений, которые не были внесены в системы контроля версий;
  • Проверяет, что нет snapshot зависимостей;
  • Обновляет pom.xml файл в системе контроля версий;
  • Проверяет версию приложения и удаляет snapshot-ы из версии перед релизом;
  • Выполняет тесты;
  • Выполняет коммит изменённого файла pom.xml;
  • Отмечает код в системе контроля версий;
  • Изменяет (увеличивает) номер версии и “подтягивает” snapshot-ы для будущих релизов;
  • Выполняет коммит изменённых файлов pom.xml в системы контроля версий.

<pre>
<code>
mvn release:perform
</code>
</pre>

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

После того, как проект был успешно запущен выполняется загрузка артефакта в репозиторий.

На этом мы заканчиваем изучение автоматизации развёртывания (deployment).

В следующей статье мы рассмотрим пример веб-приложения, созданного с использованием Maven.