2011-12-14 2 views
2

Использование Maven и Jenkins для управления развертыванием моего веб-приложения. По существу:Развертывание Java-приложений без учета производственных учетных данных в VC

  • При запуске развертывания поле CI проверяет код вне контроля версий.
  • Если код проходит испытания, он запускает релиз Maven плагин для создания версионных войн, и помещает его в нашей местной связующей репо
  • В том же сборках, тянет артефакт из связующих, и копирует артефакт в кот, вызывая Tocmat возобновить войну.

Это прекрасно работает, и, используя эту технику, я могу использовать maven для замены соответствующих конфигураций среды, если они находятся в рамках проекта. Тем не менее, мой SysAdmin считает, что угроза безопасности имеет производственные учетные данные в VC. Вместо этого мы предпочли бы хранить производственные учетные данные на производственных машинах, которые будут их использовать. Я могу представить, как писать простой скрипт bash в ssh в окне службы и мягко связывать файл conf с пулом классов, но это похоже на довольно неэлегантное решение.

Разве это разумно? Есть ли лучший/более стандартный способ добиться этого? Действительно ли это угроза безопасности для хранения учетных данных в VC?

ответ

0

У вас есть файл conf на вашем производственном сервере в определенном месте. Это место также может быть собственностью.

Если нет особых причин для не загружая его в виде файла с диска вместо загрузки в качестве ресурса из пути к классам, можно создать отдельную Maven profileproduction что бы filter места, заменив его на пути к файлу для сервера, ,

0

Да, это угроза безопасности, чтобы иметь учетные данные о производстве в контроле версий. Это освобождает ваших разработчиков, чтобы они делали практически все, что захотят. Такие правила, как HIPAA в медицине или PCI для электронной коммерции или SoX для публичных американских компаний, будут хмуриться. Ваш системный администратор тоже разумен.

Основная стратегия заключается в экстернализации этой конфигурации и развертывании процесса развертывания в данных, относящихся к окружающей среде.

Имея эту информацию на самом производственном сервере, это нормально, но не отличное решение. Это хорошо, когда у вас есть только один целевой сервер. Когда у вас есть куча, есть головная боль обслуживания. Всякий раз, когда env. конкретные изменения данных, он должен быть обновлен на каждом сервере. Вы также должны быть уверены, что имеете только env. конкретная информация или изменения, внесенные разработчиками в ранние среды, не могут быть переданы sys-admin для изменения во время развертывания, что приводит к ошибкам производственного развертывания.

Вот где, я думаю, Хадсон позволяет вам отказаться от перспективы непрерывной доставки. Некоторые из коммерческих инструментов, в том числе моей компании, формально отслеживают различные среды и надежно позволяют sys-admin настраивать производственные учетные данные, а разработчики настраивают учетные данные разработчика с помощью этого инструмента. Подобным образом инструменты автоматизации выпуска приложений, такие как наш uDeploy, которые будут вытаскивать из Хадсона и развертывать их, должны иметь такую ​​конфигурацию для каждой конфигурации среды.

В этих сценариях большинство файлов свойств/xml имеют общую конфигурацию, а механизм развертывания заменяет env. конкретные данные при развертывании.

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

У вас здесь есть выбор вариантов. Подумайте, как все меняется в зависимости от окружающей среды; что зависит от сервера; что нужно обеспечить, какие изменения со временем на стороне разработчиков и т. д. И, пожалуйста, пожалуйста, присаживайтесь с вашим sys-admin и вместе разрабатывайте решение. У каждого из вас есть понимание, другое - нет, и окончательное решение будет лучше для сотрудничества.

Смежные вопросы