Я недавно выпустил проект maven и не мог перестать думать, что весь процесс очень сложен и подвержен ошибкам. Допустим, у меня есть приложение, которое состоит из 3 модулей A, B и C, каждый из которых имеет свою собственную папку в Subversion и отдельную работу по сборке в Hudson. Каждый модуль имеет родительский POM, который объединяет несколько артефактов. A зависит от B, а B зависит от C. Версии зависимостей определены в POM D верхнего уровня, который является родительским для A, B и C. Он делает только то, что все версии хранятся в одном месте и что во всем проекте используется только одна версия каждого артефакта. Чтобы сделать релиз, я делаю следующее:
- Выпуск POM D верхнего уровня с плагином релиза через Hudson.
- Начните с C, который больше не зависит.
- Измените C для ссылки на выпущенную версию D. Релиз C с плагином релиза.
- Введите выпущенную версию C в D, чтобы модули, зависящие от C, можно было выпускать со стабильной версией C.
- Снова отпустите D с помощью плагина релиза.
- Do 3-5 для B
- Do 3-5 для A
После этого у меня есть стабильные сборки без снимков всех артефактов в A, B и C, и я могу собрать их вместе для окончательного стабильного выпуска приложения.
На самом деле у меня было не только 3, но и 20 таких модулей. Теперь я нахожу эту процедуру очень сложной и думаю, что у нее много потенциальных проблем:
Мне нужно выпустить D несколько раз, по одному разу для каждого уровня в иерархии зависимостей. В конце концов, у меня есть D только с стабильными версиями A, B и C. Чтобы перейти к следующей версии разработки, мне нужно снова отредактировать D и сослаться на все новые версии моментальных снимков выпущенных модулей. В общем, управление зависимостями должно выполняться вручную, даже при использовании плагина релиза.
Если кто-то коммитит, пока я делаю релиз, это может испортить вещи. Чтобы быть уверенным, мне нужно будет извлечь конкретную ревизию для всех модулей, собрать и протестировать ее, а затем сделать релиз для всех модулей этой ревизии. Но как мне обеспечить это с помощью Hudson и нескольких заданий?
Зависит от 3 разных систем: сервера Subversion, сервера Hudson и сервера архивации Maven. Если только один не работает, я больше не могу отпустить.
Время отнимает. В этом процессе много раз сборка, упаковка, выгрузка, загрузка, распаковка и т. Д. Производятся снова и снова для каждого выпускаемого мной модуля. Много избыточного обмена данными с архивом происходит. Но на самом деле все может быть сделано локально, поскольку у Хадсона есть весь необходимый исходный код. Только один раз в конце необходимо загрузить окончательный пакет.
Скажем, я потерял пакеты на сервере архивации. Нет простого способа сказать Хадсону проверить версии с тегами и перестроить их в правильном порядке.
Почему это не так просто, как проверить весь код за один раз, адаптировать одну глобальную версию, собрать и протестировать ее, зафиксировать, пометить коммит и, наконец, загрузить двоичные файлы?
Спасибо за любые идеи по этому поводу.