Статьи

Maven Git Release

Мне нужно начать этот пост, заявив, что я серьезно начал работать с Git только в прошлом году. К сожалению, многие проекты, над которыми я работаю, все еще используют SVN или CVS, но теперь я наконец начинаю с нескольких, которые используют Git .

За последние несколько лет я сделал много выпусков программного обеспечения с использованием Maven Release Plugin . Я до сих пор помню, что мне потребовалась целая неделя, чтобы настроить плагин в одном из моих проектов. В большинстве случаев это работало хорошо, но если что-то пошло не так, вы могли бы потратить следующие несколько часов на решение проблемы. О, мальчик, какой кошмар!

Недавно я захотел проделать ту же самую операцию с проектом Git, и я наткнулся на плагин Maven JGit-Flow, и я должен сказать вам, что это фантастика! Очень прост в настройке и работает безупречно с первой попытки!

Этот плагин основан на модели разработки, описанной в посте «Успешная модель ветвления Git » Винсента Дриссена . Не торопитесь, чтобы прочитать это, так как это очень интересно.

Я собираюсь показать вам, как выполнить релиз с помощью этого плагина. Я буду использовать проект из моего последнего поста о Spring Batch в качестве модуля Wildfly .

Настроить

Установка очень проста, просто добавьте следующее в ваш pom.xml :

ом-jgitflow-Maven-plugin.xml

1
2
3
4
5
6
7
8
<plugin>
    <groupId>external.atlassian.jgitflow</groupId>
    <artifactId>jgitflow-maven-plugin</artifactId>
    <version>1.0-m3</version>
    <configuration>
        <noDeploy>true</noDeploy>
    </configuration>
</plugin>

Я только что добавил конфигурацию noDeploy , потому что я не выпускаю в репозиторий Maven . Это оно!

Выпуск

Давайте посмотрим на мои ветки проекта и версию:

ветви

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
radcortez:wildfly-spring-batch radcortez$ git branch -avv
* master                0b2364b [origin/master] Added documentation.
  remotes/origin/master 0b2364b Added documentation.
radcortez:wildfly-spring-batch radcortez$ mvn help:evaluate -Dexpression=project.version
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building wildfly-spring-batch 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-help-plugin:2.2:evaluate (default-cli) @ wildfly-spring-batch ---
[INFO] No artifact parameter specified, using 'com.cortez.wildfly.batch:wildfly-spring-batch:war:1.0-SNAPSHOT' as project.
[INFO]
1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Теперь просто запустите mvn jgitflow:release-start :

релиз-подготовка

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
radcortez:wildfly-spring-batch radcortez$ mvn jgitflow:release-start
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building wildfly-spring-batch 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jgitflow-maven-plugin:1.0-m3:release-start (default-cli) @ wildfly-spring-batch ---
[INFO] ensuring origin exists...
[INFO] (develop) Checking for SNAPSHOT version in projects...
[INFO] (develop) Checking dependencies and plugins for snapshots ...
What is the release version for "wildfly-spring-batch"? (com.cortez.wildfly.batch:wildfly-spring-batch) [1.0]:
[INFO] ensuring origin exists...
[INFO] (release/1.0) adding snapshot to pom versions...
[INFO] (release/1.0) updating poms for all projects...
[INFO] turn on debug logging with -X to see exact changes
[INFO] (release/1.0) updating pom for wildfly-spring-batch...
What is the development version for "wildfly-spring-batch"? (com.cortez.wildfly.batch:wildfly-spring-batch) [1.1-SNAPSHOT]:
[INFO] (develop) updating poms with next development version...
[INFO] (develop) updating poms for all projects...
[INFO] turn on debug logging with -X to see exact changes
[INFO] (develop) updating pom for wildfly-spring-batch...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

Вы получаете интерактивное меню для выбора номеров версий, которые вы хотите выпустить, так же, как и Maven Release Plugin . Я работаю над master веткой, но во время этого процесса создается ветка release с релизными версиями и ветка development с новыми версиями разработки.

релиз-подготовка-ветвь

1
2
3
4
5
radcortez:wildfly-spring-batch radcortez$ git branch -avv
  develop               728856a [origin/develop] updating poms for 1.1-SNAPSHOT development
  master                0b2364b [origin/master] Added documentation.
* release/1.0           9f88a42 updating poms for branch '1.0' with snapshot versions
  remotes/origin/master 0b2364b Added documentation.

Теперь самое интересное в том, что все по-прежнему в вашей местной среде! Если вас не устраивают изменения, вы можете избавиться от веток и начать все сначала. На данный момент сборка не производилась.

Если мы хотим выпустить, просто запустите mvn jgitflow:release-finish :

релиз-финиш

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
radcortez:wildfly-spring-batch radcortez$ mvn jgitflow:release-finish
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building wildfly-spring-batch 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- jgitflow-maven-plugin:1.0-m3:release-finish (default-cli) @ wildfly-spring-batch ---
[INFO] ensuring origin exists...
[INFO] running jgitflow release finish...
[INFO] ensuring origin exists...
[INFO] (release/1.0) Updating poms for RELEASE
[INFO] (release/1.0) removing snapshot from pom versions...
[INFO] (release/1.0) updating poms for all projects...
[INFO] turn on debug logging with -X to see exact changes
[INFO] (release/1.0) updating pom for wildfly-spring-batch...
[INFO] (release/1.0) Checking for RELEASE version in projects...
[INFO] (release/1.0) Checking dependencies and plugins for snapshots ...
    [INFO] Scanning for projects...
    [INFO]
    [INFO] ------------------------------------------------------------------------
    [INFO] Building wildfly-spring-batch 1.0

На этом шаге ветвь release будет объединена, как описано в разделе Успешная модель ветвления Git, и создаст тег. Помните, что ничего еще не было выдвинуто, так что вы всегда можете отменить процесс.

Давайте теперь посмотрим на ветви и теги:

филиал-тег

1
2
3
4
5
6
radcortez:wildfly-spring-batch radcortez$ git branch -avv
* develop               a8e762b [origin/develop] Updating develop poms back to pre merge state
  master                b6fbda0 [origin/master: ahead 3] Merge branch 'release/1.0'
  remotes/origin/master 0b2364b Added documentation.
radcortez:wildfly-spring-batch radcortez$ git tag
1.0

Теперь вы находитесь в шаге от завершения выпуска и готовы продолжить разработку в новой обновленной ветке development . Насколько это было легко?

Вывод

Рассмотрим некоторые различия между исходным плагином релиза и jgitflow:

  • Вам не нужно беспокоиться о сценических коммитах. Все локально, пока не нажмешь.
  • Больше нет проблем с другими людьми, которые меняют pom.xml в процессе.
  • Ваш проект создается только один раз, экономя время релиза.
  • Очень прост в настройке. Все выбрано из вашей конфигурации Git.

Когда я занималась расследованием / написанием, я нашла этот очень интересный пост об альтернативном способе выполнения релиза. Это стоит прочитать: http://axelfontaine.com/blog/final-nail.html Аксель Фонтейн .

Ссылка: Maven Git Release от нашего партнера JCG Роберто Кортеса в блоге