Если я вас понимаю, вы создаете отдельные ear / war / jars для каждой среды на сервере непрерывной сборки. Это правильно?
У меня есть два способа справиться с этим: Smart Way и Dumb Way :
Smart Way
Разумный способ - настроить сервер приложений (JBoss, Weblogic и т. Д.) На поиск необходимого файла свойств, внешнего по отношению к jar / ear / wars, которые установлены на сервере приложений. Таким образом, вы создаете один набор jar / ear / wars, и он работает везде. Кроме того, вы делаете что-то очень, очень важное: вы заставляете Finger O 'Blame указывать в другом месте.
Если файлы свойств упакованы как часть jar / ear / war, и что-то на сервере изменилось, вы получите вину, потому что ваша сборка была плохой. Конечно, у вас не было возможности узнать, что они изменили среду, но вы установили этот неверный файл сборки на рабочий сервер.
Однако, если свойства хранятся за пределами артефакта сборки, то именно команда, ответственная за настройку серверов, виновата.
На самом деле, группе, отвечающей за настройку сервера приложений, намного проще справиться с этой проблемой. Они знают, что изменилось, и могут обновить файл свойств, чтобы отразить это изменение. Не только это, но вам нужно только создать и распространить один набор артефактов. Вам не нужно беспокоиться о том, настроена ли новая среда или что-то в старой среде изменилось. На самом деле, изменения могут легко произойти, не заставляя вас делать новую версию.
тупой путь
Мы умели делать умный путь 1025 * в моей последней компании. В моей нынешней компании мы делаем вещи Dumb Way . Свойства встроены в наш артефакт сборки, и изменить его несложно.
Я разделил каждый набор файлов свойств по суффиксам, а не по разным каталогам (т.е. build.properties.dev1, build.properties.dev2 и т. Д.). Мы поместили файлы свойств в один каталог.
Когда я делаю сборку, я использую задачу AntContrib <for>
, чтобы выполнить цикл сборки несколько раз, каждый раз с другим файлом свойств. Затем я создаю артефакт для каждого набора файлов свойств. Я использую суффикс в файле свойств в качестве имен папок в моем каталоге target
, где хранятся встроенные артефакты. Таким образом, каждая сборка создает все артефакты для всей среды.
Таким образом, если артефакт работает в среде dev , он будет работать в QA и Production . Единственная проблема заключается в том, что я храню в 5–10 раз больше артефактов на моем сервере Jenkins, поэтому мне нужно в 5–10 раз больше дискового пространства.
Кстати, пока я могу определить <fileset>
для поиска файлов свойств, я могу использовать задачу <for>
, чтобы вы могли использовать разные каталоги. И вы можете использовать <basename>
, чтобы вытащить имена каталогов.