Наличие mvn deploy в целях сборки Hudson и стандартный подход к выпуску - PullRequest
5 голосов
/ 24 декабря 2010

Я настроил Hudson для своего проекта с целями сборки mvn clean deploy site:site, запускаю сборку каждую полночь и всякий раз, когда появляются новые изменения.

Одна вещь, которую я задавался вопросом, должна ли я включать deployв целях сборки, потому что может случиться так, что, если я только что выпустил версию 1.0.0 своего проекта (я изменил pom на версию 1.0.0 и зафиксировал его), но еще не увеличил номер версии до 1.0.1-В течение нескольких дней SNAPSHOT я мог получить несколько разных сборок 1.0.0, развернутых в разное время.

Но я видел, как люди используют deploy в своих целях сборки Hudson - интересно, как они справляютсяс этой проблемой.

Какой правильный способ сделать релиз с Maven на самом деле?Спасибо за любые указатели!

1 Ответ

9 голосов
/ 24 декабря 2010

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

Во-первых, по указанной вами причине вы должны никогда изменить идентификатор версии вашего исходного кода в транке на что-либо, кроме версии моментального снимка (например, с -SNAPSHOT в конце). В противном случае вы будете перезаписывать при повторном развертывании. Рекомендуется (временно) изменить идентификаторы версий в pom (ах) транка на версию, которую вы хотите освободить, пометить транк, собрать из тега, затем развернуть сборку, созданную вами из тега, а затем немедленно увеличить идентификатор версии снимка в соединительной линии и, наконец, зафиксируйте соединительную линию с более новым, более высоким номером версии снимка.

Если это кажется хлопотным, то вам следует знать, что Плагин Maven Release сделает все это автоматически, полагаясь на Плагин Maven SCM для выполнения работы с ваша система контроля версий.

Хотя я полюбил использовать плагин Maven Release из Гудзона, это очень обидно. Для того, чтобы он функционировал должным образом, вот несколько советов:

  • Реальные релизы должны выполняться Хадсоном, но разработчики могут конечно же делай их из своих разработка машин, чтобы проверить процесс выпуска. Просто обязательно удалить любые теги в Subversion и любые выпустить артефакты в Nexus впоследствии.
  • Он использует maven-scm-plugin, который, в свою очередь, требует внешнего установленная версия Subversion будет на текущем пути. Таким образом версия Subversion также должна быть уже кэшировал учетные данные, необходимые для написать в источник подрывной деятельности хранилище.
  • Если процесс выпуска прерывается на полпути, вы можете сделать выпуск: откат, чтобы исправить помпы, но это не устранит поддельные теги которые уже были привержены подрывная деятельность. Эти вам придется удалить вручную, после выполнения SVN обновить.
  • Релиз: цель отката иногда не возвращает pom.xml версия обратно в SNAPSHOT. Если что-то идет не так, проверьте POM версия для обеспечения использования «SNAPSHOT».
  • Релиз: цель отката иногда не возвращает URL-адреса SCM вернуться в исходное местоположение. Если что-то идет не так, проверьте, что эти указать на «ствол» или исходный филиал.
  • Поскольку мы используем Subversion, наша конфигурация maven-release-plugin позволяет опция {{suppressCommitBeforeTag}} который устраняет дополнительный коммит, который другой будет модифицировать ствол pom.xml файлы перед их изменением.

Также обратите внимание, что существует интеграция Maven Release Plugin с Hudson , но не требуется вызывать цели плагина релиза Maven из Hudson, это просто упрощает, однако у меня был не повезло заставить этот плагин работать.

Итак, подведем итог:

  1. Развертывание только из транка, используя ИЛЛЮСТРАЦИИ
  2. Используйте релиз Maven плагин для развертывания из тега во время релиз.

Надеюсь, это поможет.

...