Развертывание AWS: команды Jenkins + CodeSeploy AWS и Jenkins + по SSH - PullRequest
0 голосов
/ 26 апреля 2018

Хотелось бы узнать, как лучше подходить к развертыванию кода в экземпляре AWS EC2.

На моем рабочем месте у нас есть проект, в котором будет развернута работа по развертыванию Jenkins (1):

  • потяните код на машине Дженкинса
  • архивируйте его и загрузите в экземпляр S3
  • CodeDeploy загружает и распаковывает код в экземпляр EC2
  • выполняет миграцию, создает ресурсы, перезапускает сервер и т. Д.

А с другой стороны это пошло бы (2):

  • SSH Дженкинса для экземпляра EC2
  • Git Pulls из производственной ветки / метки выпуска
  • выполняет миграцию, создает ресурсы, перезапускает сервер и т. Д.

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

По вашему опыту, какой из них был бы лучше (исключая часть тестирования)? Есть ли какие-либо явные проблемы безопасности с какой-либо из них, о которых я не знаю?

1 Ответ

0 голосов
/ 26 апреля 2018

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

Это может быть либо для изменений, связанных с приложением, либо для изменений в инфраструктуре.

Как вы упомянули, артефакты развертываемых приложений загружаются на S3, а CodeDeploy делает все остальное в зависимости от конфигурации развертывания. Это дает вам возможность автоматически откатывать изменения и т. Д.

Кроме того, я считаю, что ssh-доступ не требуется при работе с инфраструктурами, связанными с CodeDeploy, поэтому это уменьшает некоторые проблемы с обслуживанием и безопасностью, связанные с ключами и т. Д.

Со стороны инфраструктуры. Относительно легко построить некоторую инфраструктуру с балансировкой нагрузки (ELB + ASG) в AWS и связать ее с CodeDeploy. Агент - это все, что требуется. Однако, если вам нужно настроить инфраструктуру, то есть масштабировать или увеличить ее. Эти изменения можно относительно легко внедрить с помощью CodeDeploy и его конфигураций развертывания.

Кроме того, из корзины S3 вместо прямого перехода на CodeDeploy можно включить CodePipeline, состоящий из этапов развертывания, которые развертываются в различных средах, подключенных к CodeDeploy. Это означает, что, возможно, некоторые задачи тестирования, выполняемые Jenkins, можно было бы делегировать CodeDeploy или этапу CodePipeline, который ведет к завершающему этапу CodeDeploy.

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

Надеюсь, это поможет! Patrick

...