«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.