Мне нужно начать этот пост, заявив, что я серьезно начал работать с 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 Роберто Кортеса в блоге |