Мне нужно начать этот пост, заявив, что я серьезно начал работать с 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 tag1.0 |
Теперь вы находитесь в шаге от завершения выпуска и готовы продолжить разработку в новой обновленной ветке development . Насколько это было легко?
Вывод
Рассмотрим некоторые различия между исходным плагином релиза и jgitflow:
- Вам не нужно беспокоиться о сценических коммитах. Все локально, пока не нажмешь.
- Больше нет проблем с другими людьми, которые меняют pom.xml в процессе.
- Ваш проект создается только один раз, экономя время релиза.
- Очень прост в настройке. Все выбрано из вашей конфигурации Git.
Когда я занималась расследованием / написанием, я нашла этот очень интересный пост об альтернативном способе выполнения релиза. Это стоит прочитать: http://axelfontaine.com/blog/final-nail.html Аксель Фонтейн .
| Ссылка: | Maven Git Release от нашего партнера JCG Роберто Кортеса в блоге |