Поскольку это не вопрос с единственным ответом, в зависимости от проекта и, если нет, личного вкуса, я опубликую некоторые шаги, которые, как я считаю, могут помочь всему процессу управления / развертывания.
Это не означает, что решения, предлагаемые другими авторами, неверны (некоторые из них получили мое одобрение), но то, что я обнаружил, будет работать лучше для меня.
1) Чтобы иметь только одну версию войны с несколькими конфигурациями, я использовал JNDI.Я установил переменную env в путь, где я мог бы найти конфигурацию.Это было добавлено в web.xml:
<env-entry>
<description>path to configuration files</description>
<env-entry-name>appName/pathToConfigFiles</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/configFolder/appName/</env-entry-value>
</env-entry>
Это значение по умолчанию, когда файлы конфигурации взяты из войны, но оно может быть переопределено context.xml.
<Environment name="appName/pathToConfigFiles"
type="java.lang.String" value="/etc/.."/>
Таким образом, если кому-то нужно, например, изменить параметры подключения к базе данных, мне не придется развертывать новую войну.Администратор может изменить файл в папке конфигурации.Файл конфигурации db и файл log4j - мои единственные внешние файлы.Остальная конфигурация выполняется через базу данных.
Основным преимуществом является то, что один и тот же артефакт может быть развернут как в тестировании, так и на производстве, и на любом из 100 серверов.В настоящее время я использую его в Tomcat, но переменные env должны быть доступны на других серверах приложений.
2) Изменено с сборки IDE на инструмент сборки.Я выбрал Maven, но вы можете использовать муравья / что угодно.Для этого мне пригодились следующие источники:
Для этого мне также потребуется установить Nexus в качестве зеркального хранилища.
3) Установить инструмент непрерывной интеграции, такой как Jenkins / Hudson.Это замечательный инструмент, но из-за его сложной природы, потребуется время, чтобы настроить его и расширить его функциональность.В настоящее время я читаю Jenkins: Полное руководство и пытаюсь получить следующие функциональные возможности:
- Автоматизированный сервер сборки
- Автоматизированный тестовый сервер Junit
- Добавление показателей
- Автоматизированное развертывание env и приемочное тестирование
- Непрерывное развертывание
До тех пор, пока это не будет выполнено, войны будут развернуты с помощью сценариев bash.Я просто выкладываю войну на сервер (без взрыва и перезаписи).