Два основных способа развертывания веб-приложения J2EE / Java (в очень упрощенном смысле):
Развертывание собранных артефактов в производственную коробку
Здесь мы создаем .war
(или что-то еще) в другом месте, настраиваем его для производства (возможно, создавая многочисленные артефакты для множества ящиков) и размещаем полученные артефакты на производственных серверах.
- Плюсы : на рабочих блоках нет инструментов разработки, можно повторно использовать артефакты непосредственно из тестирования, персоналу, выполняющему развертывание, не нужны знания о процессе сборки
- Минусы : два процесса создания и развертывания артефактов; потенциально сложная конфигурация предварительно созданных артефактов может усложнить процесс сценария / автоматизации; должны версии бинарных артефактов
Создание артефактов на производственной коробке
Здесь тот же процесс, который используется ежедневно для сборки и развертывания локально на блоках разработчика, используется для развертывания в рабочей среде.
- Плюсы : один процесс для обслуживания; и это сильно проверено / подтверждено частым использованием. Потенциально проще настроить конфигурацию во время создания артефакта, чем настраивать предварительно созданное послесловие артефакта; не требуется версия бинарных артефактов.
- Минусы : потенциально сложные инструменты разработки, необходимые на всех производственных блоках; персонал развертывания должен понимать процесс сборки; вы не развертываете то, что тестировали
В основном я использовал второй процесс, по общему признанию из-за необходимости (нет времени / приоритета для другого процесса развертывания). Лично я не покупаю аргументы типа «рабочая коробка должна быть чистой от всех компиляторов и т. Д.», Но я могу увидеть логику в развертывании того, что вы тестировали (в отличие от создания другого артефакта) ).
Тем не менее, приложения Java Enterprise настолько чувствительны к настройке, что кажется, что возникает проблема с двумя процессами настройки артефактов.
Мысли
Обновление
Вот конкретный пример:
Мы используем OSCache и включаем дисковый кеш. Файл конфигурации должен находиться внутри .war-файла, и он ссылается на путь к файлу. Этот путь отличается в каждой среде. Процесс сборки определяет настроенное местоположение пользователя и гарантирует, что файл свойств, помещенный в войну, соответствует его среде.
Если бы мы использовали процесс сборки для развертывания, это было бы вопросом создания правильной конфигурации для производственной среды (например, production.build.properties
).
Если бы мы следовали «развертыванию собранных артефактов в рабочей коробке», нам потребовался бы дополнительный процесс для извлечения (неправильных) свойств OSCache и замены его на один, соответствующий производственной среде.
Это создает два процесса для достижения одного и того же.
Итак, вопросы:
- Этого можно избежать без "компиляции на производстве"?
- Если нет, стоит ли это того? Это значение «без компиляции на производстве» больше, чем «Не повторяй себя»?