Развертывание приложений Java без включения рабочих учетных данных в VC

Я использую Maven и Jenkins для управления развертыванием моего веб-приложения. По сути:

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

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

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


person idbentley    schedule 14.12.2011    source источник


Ответы (2)


У вас есть файл conf на рабочем сервере в каком-то месте. Это место тоже может быть собственностью.

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

person Oleg Mikheev    schedule 14.12.2011

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

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

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

Вот где, я думаю, Хадсон подводит вас с точки зрения непрерывной доставки. Некоторые коммерческие инструменты, включая uBuild/AnthillPro моей компании, официально отслеживают различных средах и позволит системному администратору безопасно настраивать учетные данные для производства, а разработчикам — для настройки учетных данных для разработчиков с помощью инструмента. Точно так же инструменты автоматизации выпуска приложений, такие как наш uDeploy, Hudson и их развертывание должны иметь такую ​​конфигурацию для каждой среды.

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

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

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

person EricMinick    schedule 15.12.2011