Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)

8,593 views

Published on

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

В самом начале, когда наш проект маленький и простой, на эту задачу никто может и не обращать внимания, так как все происходит быстро и просто. Процесс деплоя состоит из 2-3 общеизвестных шагов — git pull, yii migrate, etc..., которые легко запомнить и в них сложно ошибиться.

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

В докладе:
— рассмотрим подробно вышеуказанные проблемы, с которыми неизбежно сталкиваются проекты;
— обсудим, какие решения существуют в индустрии (chef, ansible, etc), чем они отличаются, какой выбрать и в чем их задача;
— поговорим про административные вопросы, которые с этим связаны.

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Эволюция процесса деплоя в проекте / Денис Яковлев (2ГИС)

  1. 1. Эволюция процесса деплоя в проекте Яковлев Денис 2gis.ru    @rnd2gis
  2. 2. О себе
  3. 3. •  Parallels •  10 лет •  От QA engineer до Team Lead •  2ГИС •  ~1.5 года •  Ведущий разработчик 3
  4. 4. Deploy
  5. 5. Составляющие
  6. 6. Код •  SCP •  FTP/SFTP •  Rsync •  Git pull 6
  7. 7. Данные •  Миграции •  yii migrate •  django-admin.py migrate •  etc... 7
  8. 8. Конфиги •  Значения переменных •  Рестарт сервисов 8
  9. 9. Third party •  Install •  Upgrade •  Configure 9
  10. 10. Решения  "в лоб"
  11. 11. "Ручками" •  Wiki •  SSH 11
  12. 12. Скрипты •  Bash •  Perl •  PowerShell 12
  13. 13. Плюсы
  14. 14. •  Быстро •  Просто Но только для простых проектов 14
  15. 15. Минусы
  16. 16. Увеличивается •  Количество документации •  Сложность скриптов •  Ручной труд 16
  17. 17. Infrastructure as a code
  18. 18. The essence of Infrastructure as Code is to treat the configuration of systems the same way that software source code is treated Kief Morris. ThoughtWorks Infrastructure automation makes it possible to carry out actions repeatedly, across a large number of nodes. Infrastructure as code uses techniques, practices, and tools from software development to ensure those actions are thoroughly tested before being applied to business critical systems. Kief Morris. ThoughtWorks “ “ 18
  19. 19. Инструменты
  20. 20. CMS •  Ansible •  Chef •  SaltStack •  Puppet •  ... 20
  21. 21. Ansible
  22. 22. Ansible. Host inventory [webservers] www.example1.com www.example2.com [dbservers] db1.example.com db2.example.com 01. 02. 03. 04. 05. 06. 22
  23. 23. Ansible. Playbooks •  hosts •  tasks ansible-playbook -i hosts playbook.yml 23
  24. 24. Ansible. nginx install --- - hosts: webservers tasks: - name: Install nginx yum: name=nginx state=latest - name: Copy nginx configuration template: src=default.conf dest=/path/to/file notify: restart nginx 01. 02. 03. 04. 05. 06. 07. 08. 24
  25. 25. 25
  26. 26. Chef
  27. 27. Chef •  Cookbooks •  Roles •  Environment 27
  28. 28. Chef. Configurations •  Chef server 28
  29. 29. 29
  30. 30. Chef. Configurations •  Chef server •  Chef zero •  Chef solo 30
  31. 31. Chef: nginx install package "nginx" do action :install end 01. 02. 03. 31
  32. 32. Рабочие  моменты
  33. 33. •  Зона ответственности •  Новый workflow разработки •  + Написание инфраструктуры •  + Тестирование инфраструктуры 33
  34. 34. Тестирование •  Vagrant vagrant init hashicorp/precise32 vagrant up 34
  35. 35. Тестирование Vagrant.configure("2") do |config| config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["cookbooks", "my_cookbooks"] chef.add_recipe "apache" end end 01. 02. 03. 04. 05. 06. 35
  36. 36. С чего начать?
  37. 37. •  Автоматизировать простой сервис •  Ссылки •  https://galaxy.ansible.com •  https://supermarket.chef.io/cookbooks •  https://docs.ansible.com/playbooks_best_practices.html 37
  38. 38. Вопросы? Яковлев Денис d.yakovlev@2gis.ru 38

×