Выпуск с Maven

Я недавно выпустил проект maven и не мог перестать думать, что весь процесс очень сложен и подвержен ошибкам. Допустим, у меня есть приложение, состоящее из 3 модулей A, B и C, каждый из которых имеет свою собственную папку в Subversion и отдельное задание сборки в Hudson. У каждого модуля есть родительский POM, который объединяет несколько артефактов. A зависит от B, а B зависит от C. Версии зависимостей определены в POM D верхнего уровня, который является родительским для A, B и C. Он не делает ничего, кроме того, что все версии хранятся в одном месте и что во всем проекте используется только одна версия каждого артефакта. Чтобы выпустить релиз, я делаю следующее:

  1. Выпускаю POM D верхнего уровня с плагином выпуска через Hudson.
  2. Начинаю с C, у которого больше нет зависимостей.
  3. Измените C, чтобы ссылаться на выпущенную версию D. Выпуск C с плагином выпуска.
  4. Введите выпущенную версию C в D, чтобы модули, зависящие от C, могли быть выпущены со стабильной версией C.
  5. Выпустите D снова с плагином выпуска.
  6. Выполните 3-5 для B
  7. Выполните 3-5 для A

После этого у меня есть стабильные сборки без моментальных снимков всех артефактов в A, B и C, и я могу собрать их вместе в окончательный стабильный выпуск приложения .

На самом деле, Таких модулей у меня было не 3, а около 20. Теперь я считаю эту процедуру очень сложной, и я думаю, что в ней есть много потенциальных проблем:

  • Мне нужно выпустить D несколько раз, по одному для каждого уровня в иерархии зависимостей. В итоге у меня есть D только с стабильными версиями A, B и C. Чтобы продолжить разработку следующей версии, мне нужно снова отредактировать D и сослаться на все новые версии снэпшотов выпущенных модулей. В общем, управление зависимостями должно выполняться вручную, даже при использовании плагина выпуска.

  • Если кто-то совершит фиксацию, пока я делаю выпуск, это может все испортить. Чтобы быть уверенным, мне придется проверить конкретную ревизию всех модулей, собрать и протестировать ее, а затем выполнить выпуск для всех модулей этой ревизии. Но как мне обеспечить это с помощью Hudson и нескольких заданий?

  • Зависит от 3 разных систем: Сервер Subversion, сервер Hudson и сервер архива Maven. Если выйдет из строя только один, я больше не смогу освободить.

  • Требуется время. В этом процессе для каждого модуля, который я выпускаю, много раз выполняется сборка, упаковка, загрузка, загрузка, извлечение и т. Д. Происходит много избыточного обмена данными с архивом. Но на самом деле все можно было сделать локально, поскольку у Хадсона есть весь необходимый исходный код. Только один раз в конце нужно загрузить последний пакет.

  • Допустим, я теряю пакеты на сервере архивации. Нет простого способа сказать Хадсону, чтобы он проверял версии с тегами и перестраивал их все в правильном порядке.

Почему это не может быть так просто, как проверить весь код за один раз, адаптировать одну глобальную версию, собрать и протестировать это, совершить, пометить коммит и, наконец, загрузить двоичные файлы?

Спасибо за любые идеи по этому поводу.

6
задан anselm 12 March 2011 в 19:28
поделиться