Статьи

Создание конвейера сборки с использованием Maven, Jenkins, Subversion и Nexus.

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

  • Проверьте весь код проекта в Subversion и пометьте
  • Создайте приложение.
  • Архивировать двоичный файл приложения на сетевой диск
  • Развернуть в производство
  • Обновите нашу вики-страницу развертывания, указав дату и номер версии приложения, которое только что было развернуто.

Проблема в том, что иногда были случаи, когда один из этих шагов был пропущен, и всегда казалось, что нам нужно было либо откатиться к предыдущей версии, либо перейти от тега для исправления ошибки. Иногда предыдущая версия не была заархивирована в сеть, или разработчик забыл пометить SVN. Мы уже использовали Jenkins для выполнения автоматических сборок, поэтому мы хотели бы расширить его для выполнения сборок релизов.

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

Первый шаг — настроить pom-файл проекта с помощью плагина Deploy, а также включить информацию о конфигурации наших репозиториев Nexus и Subversion.

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-release-plugin</artifactId>
   <version>2.2.2</version>
   <configuration>
      <tagBase>http://mks:8080/svn/jrepo/tags/Frameworks/SiestaFramework</tagBase>
    </configuration
</plugin>

Конфигурация плагина Release довольно проста. Конфигурация принимает URL-адрес subversion местоположения, в котором будут находиться теги для этого проекта.

Следующим шагом является настройка местоположения SVN, откуда будет извлечен код.

<scm>
   <connection>scm:svn:http://mks:8080/svn/jrepo/trunk/Frameworks/SiestaFramework</connection>
   <url>http://mks:8080/svn</url>
</scm>

Последний шаг в настройке проекта — это установка места, куда будут архивироваться двоичные файлы. В нашем случае хранилище Nexus.

<distributionManagement>
   <repository>
       <id>Lynden-Java-Release</id>
       <name>Lynden release repository</name>
       <url>http://cisunwk:8081/nexus/content/repositories/Lynden-Java-Release</url>
    </repository>
</distributionManagement>

Теперь проект готов к использованию подключаемого модуля Maven. Плагин Release предоставляет ряд полезных целей. 

  • release: clean — Очищает рабочее пространство в случае, если последний процесс выпуска не был успешным.
  • релиз: подготовить — выполняет ряд операций

    • Проверяет, чтобы убедиться в отсутствии незафиксированных изменений.
    • Гарантирует, что в файле POM нет зависимостей SNAPSHOT,
    • Изменяет версию приложения и удаляет SNAPSHOT из версии. то есть 1.0.3-SNAPSHOT становится 1.0.3
    • Запустите тестирование проекта на модифицированных POM
    • Зафиксировать измененный POM
    • Пометьте код в Subersion
    • Увеличьте номер версии и добавьте SNAPSHOT. то есть 1.0.3 становится 1.0.4-SNAPSHOT
    • Зафиксировать измененный POM
  • release: execute — выполняет процесс выпуска

    • Проверяет код, используя ранее определенный тег
    • Запускает цель развертывания Maven для перемещения полученного двоичного файла в хранилище.

Собираем все вместе

Последний шаг в этом процессе — настройка Jenkins для разрешения сборки релизов по требованию. Это означает, что мы хотим, чтобы пользователь явно запускал сборку релиза для этого процесса. Мы загрузили и установили плагин Release Jenkins, чтобы позволить разработчикам запускать сборки релизов от Jenkins. Плагин Release будет выполнять задачи после завершения обычной сборки. Ниже приведен скриншот конфигурации одного из наших проектов. Опция сборки релиза для проекта включается выбором опции «Настроить сборку релиза» в разделе «Среда сборки». 

Плагин релиза Maven активируется добавлением целей в раздел «После успешной сборки релиза». (Опция –B включает пакетный режим, так что плагин Release не будет запрашивать ввод у пользователя, а вместо этого будет использовать значения по умолчанию.)

 

образ

 

После настройки варианта релиза для проекта в левом меню навигации для проекта появится значок «Релиз». Выбор этого параметра приведет к запуску сборки, а затем к процессу выпуска Maven, если сборка прошла успешно.

образ

 

Наконец, взгляд на SVN и Nexus подтверждает, что сборка для версии 1.0.4 проекта Siesta-Framework была помечена в SVN и загружена в Nexus.

образ

 

образ

 

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

twitter: @RobTerp


блог: http://rterp.wordpress.com