SlideShare a Scribd company logo
План
1. Теория и реальность
2. Выбор системы
3. Наш путь
Немного о нас
● Продукт iFunny как флагман компании
● Целевая аудитория - США и Бразилия
● 4 миллиона DAU в сутки
● Инфраструктура на AWS
● API-монолит, требующий частых
деплоев…
● ...и множество вспомогательных сервисов
Buzzwords
1. Jenkins
2. no-Jenkins
3. Docker Compose
4. Terraform
5. Amazon ECS
О чем говорится в Библии
● Быстрые и небольшие изменения
● Версионирование процесса
● Понятный визуализированный pipeline
● Релиз в production по кнопке
● Триггер сборок по зависимостям
На деле
● Огромный git merge и плачевный исход
● Описание сборки только в GUI
● Процесс сборки/тестирования - черный ящик
● Нет кнопки “deploy” (вообще!)
…
● Но с зависимостями все хорошо
○ Хотя и не везде
И это еще не все
● 80% решений - платные
● Лимиты по concurrency-билдам
● Перебои в нужный момент
Чего не хватает?
● Культуры разработки
● Тестов
● Автоматизации
● Идемпотентности и стабильности
● Времени
Понятие CI Theatre
● Наличие CI-сервера = Continuous Integration
● Долгоживущие ветки → Страх во время merge
● Комментировать тесты, чтобы билд прошел
● Неразборчивость в терминах в принципе
● Ответственность на “релиз-инженерах”
Что было раньше
● Лицензия Bamboo на 5 агентов
● Как следствие, очередь из билдов
● Небольшой configuration drift
● Проблемы с автоматизацией процессов
● Продукт потерял актуальность
Выбор новой системы
Минус ограничения и стоимость SAAS
Минус платные агенты
Минус зависимость от стека технологий
Минус трамвай из буханки хлеба
Как следствие
Артефакт поставки: было
● Деплой API в ZIP-архиве
● 40% деплоя в rpm
● 50% деплоя в контейнерах
Артефакт поставки: проблемы
● А как деплоить новый сервис X?
● Недо-автоматизация процессов
● Segmentation faults из-за обновления opcache в PHP
Артефакт поставки: стало
Все в сад контейнеры
● Стандартизация сборки и поставки
● Гибкость разработки
● Простота и понятность
● Масштабируемость сервиса
Тесты API: было
Dev-сервера с базами данных
● Зависимость от тестовых данных
● Быстрое захламление данными
● Долгое время выполнения тестов
Тесты API: стало
Docker-compose с контейнерами БД
● Быстрый старт тестирования
● Независимость от платформы
● Сокращение времени pipeline с 30
до 10 минут
...однако есть проблема с concurrency
Docker-Compose + Jenkins: реализация
● Поднимаем новые ноды перед тестами
● Тэггируем их именем билда
● Инициализируем compose-окружение
● Накатываем тестовые данные
● Параллельно прогоняем пакеты тестов
● Убиваем compose-окружение
● Снимаем тег для использования в последующих билдах
Инструментарий деплоя: было
● Часть сервисов на Ansible + IPtables + conntrack
● Часть сервисов на Amazon Elastic Beanstalk
● Что-то вообще деплоили руками
○ со временем завернули в Ansible
Инструментарий деплоя: проблемы
Ansible + IPtables + Conntrack
● Некорректная обработка unreachable-хостов
● Пятисотки от Docker API
● Нельзя остановить деплой
● Отсутствие параллелизации внутри одного хоста
Beanstalk
● Медленный деплой
● Множество ограничений и подводных камней
● Неуместные CloudFormation-стеки
Главная проблема остается
А как деплоить новый сервис X?
Инструментарий деплоя: стало
Amazon Elastic Container Service
ECS: базовые концепции
● Cluster → Service → Task
● Task Definition в JSON
● ECS-агент для контроля хостов
● Application Load Balancer для контроля трафика
● Task placement strategy для распределения контейнеров
● Min/max healthy percentage для конфигурации деплоя
● Autoscaling задач по Cloudwatch alarms
ECS: текущее состояние
● 5 кластеров
● 18 сервисов
● 100-150 контейнеров
Проблемы текущего подхода
● Подводные камни в
масштабировании
● Отсутствие Service Discovery
● Отсутствие инструмента деплоя от
Amazon
○ Альтернатива - ecs-deploy
Чем помогает Jenkins
● Автоматизация инициализации агентов
(EC2 plugin)
● Описание pipeline в коде (Groovy)
● Большая база плагинов
● Отсутствие ограничений по concurrency-
билдам
● Open-source software как экономия
● Потрясная интеграция с Github
Чем не помогает Jenkins
● Нельзя строить интеграцию с ECS и
Beanstalk в pipeline
● Концепции билда и деплоя не разделены
Чем вредит Jenkins
● Бесконечные апдейты бесконечного числа
плагинов
● Подводные камни в Groovy
● Отсутствие обработки ошибок плагинов
● Периодические аномалии, за которые
стыдно
○ решается рестартом
Выводы
● Релиз-инжиниринг - задача из разряда “сделай сам”
● Легко наступить в “культ карго” - сложно выбраться
● Сложность delivery-pipeline и вашего приложения коррелируются
● Однако все это очень интересно
https://myopsblog.wordpress.com/
https://www.facebook.com/mchinkov
michael.chinkov@gmail.com
https://www.slideshare.net/MikhailChinkov

More Related Content

What's hot

"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo KazymyrovFwdays
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь КашкутаCodeFest
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25Alex Chistyakov
 
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...Ontico
 
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...Provectus
 
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языкеКак автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языкеSQALab
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Ontico
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...it-people
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Fwdays
 
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для MacКонстантин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac404fest
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019UA Mobile
 
Дополнительные материалы от Егора Васильва
Дополнительные материалы от Егора ВасильваДополнительные материалы от Егора Васильва
Дополнительные материалы от Егора ВасильваSQALab
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаendeveit
 
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NETДенис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NETElias Fofanov
 

What's hot (16)

"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
"Prom.ua shopping cart workflow as a microfrontend", Danylo Kazymyrov
 
Игорь Кашкута
Игорь КашкутаИгорь Кашкута
Игорь Кашкута
 
Use Grunt Luke
Use Grunt LukeUse Grunt Luke
Use Grunt Luke
 
My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25My talk on Docker from Moscow Django Meetup #25
My talk on Docker from Moscow Django Meetup #25
 
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
Continuous Delivery, или волшебная кнопка для релизов по запросу, Денис Яковл...
 
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
Dive into DevOps | March, How we've migrated projects into Kubernetes and nob...
 
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языкеКак автоматизировать рутинные задачи или учимся разговаривать на змеином языке
Как автоматизировать рутинные задачи или учимся разговаривать на змеином языке
 
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
Цикл разработки и внедрения функционала в Мамбе (Михаил Буйлов)
 
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
DUMP-2015: «DevOps-практики в разработке решений для бизнеса» Максим Пашук, 2...
 
Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"Никита Галкин "Testing in Node.js World"
Никита Галкин "Testing in Node.js World"
 
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для MacКонстантин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019Історія декількох проектів та що в них пішло не так - UA Mobile 2019
Історія декількох проектів та що в них пішло не так - UA Mobile 2019
 
Дополнительные материалы от Егора Васильва
Дополнительные материалы от Егора ВасильваДополнительные материалы от Егора Васильва
Дополнительные материалы от Егора Васильва
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NETДенис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
Денис Давыдов - Кроссплатформенные инструменты серверной разработки .NET
 

Similar to Страх и ненависть в мире релиз-инжиниринга

"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 
Асинхронный биллинг для службы такси - IzhDevCom November 2014
Асинхронный биллинг для службы такси - IzhDevCom November 2014Асинхронный биллинг для службы такси - IzhDevCom November 2014
Асинхронный биллинг для службы такси - IzhDevCom November 2014Egor Konovalov
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеSQALab
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времениAndriy Samilyak
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПОDmitry Lazarenko
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxPlatonov Sergey
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_haElena Ometova
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, SkypeOntico
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
А так ли нужен DevOps инженер в проекте?
А так ли нужен DevOps инженер в проекте?А так ли нужен DevOps инженер в проекте?
А так ли нужен DevOps инженер в проекте?Mad Devs
 
С. Перроте (Q Logic) Ускорение работы приложений
С. Перроте (Q Logic) Ускорение работы приложенийС. Перроте (Q Logic) Ускорение работы приложений
С. Перроте (Q Logic) Ускорение работы приложенийExpolink
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Ontico
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...IT-Portfolio
 

Similar to Страх и ненависть в мире релиз-инжиниринга (20)

"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Sivko
SivkoSivko
Sivko
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Асинхронный биллинг для службы такси - IzhDevCom November 2014
Асинхронный биллинг для службы такси - IzhDevCom November 2014Асинхронный биллинг для службы такси - IzhDevCom November 2014
Асинхронный биллинг для службы такси - IzhDevCom November 2014
 
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качествеКак hh.ru дошли до 500 релизов в квартал без потери в качестве
Как hh.ru дошли до 500 релизов в квартал без потери в качестве
 
DevOps в реальном времени
DevOps в реальном времениDevOps в реальном времени
DevOps в реальном времени
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
 
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
 
владивосток форум производительность_ha
владивосток форум производительность_haвладивосток форум производительность_ha
владивосток форум производительность_ha
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Павел Брылов, Skype
Павел Брылов, SkypeПавел Брылов, Skype
Павел Брылов, Skype
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
А так ли нужен DevOps инженер в проекте?
А так ли нужен DevOps инженер в проекте?А так ли нужен DevOps инженер в проекте?
А так ли нужен DevOps инженер в проекте?
 
Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
С. Перроте (Q Logic) Ускорение работы приложений
С. Перроте (Q Logic) Ускорение работы приложенийС. Перроте (Q Logic) Ускорение работы приложений
С. Перроте (Q Logic) Ускорение работы приложений
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
 
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
13 октября, DEV {web} - конференция о Highload веб-разработке. "Управление ок...
 

Страх и ненависть в мире релиз-инжиниринга

  • 1.
  • 2. План 1. Теория и реальность 2. Выбор системы 3. Наш путь
  • 3. Немного о нас ● Продукт iFunny как флагман компании ● Целевая аудитория - США и Бразилия ● 4 миллиона DAU в сутки ● Инфраструктура на AWS ● API-монолит, требующий частых деплоев… ● ...и множество вспомогательных сервисов
  • 4. Buzzwords 1. Jenkins 2. no-Jenkins 3. Docker Compose 4. Terraform 5. Amazon ECS
  • 5.
  • 6. О чем говорится в Библии ● Быстрые и небольшие изменения ● Версионирование процесса ● Понятный визуализированный pipeline ● Релиз в production по кнопке ● Триггер сборок по зависимостям
  • 7. На деле ● Огромный git merge и плачевный исход ● Описание сборки только в GUI ● Процесс сборки/тестирования - черный ящик ● Нет кнопки “deploy” (вообще!) … ● Но с зависимостями все хорошо ○ Хотя и не везде
  • 8. И это еще не все ● 80% решений - платные ● Лимиты по concurrency-билдам ● Перебои в нужный момент
  • 9. Чего не хватает? ● Культуры разработки ● Тестов ● Автоматизации ● Идемпотентности и стабильности ● Времени
  • 10. Понятие CI Theatre ● Наличие CI-сервера = Continuous Integration ● Долгоживущие ветки → Страх во время merge ● Комментировать тесты, чтобы билд прошел ● Неразборчивость в терминах в принципе ● Ответственность на “релиз-инженерах”
  • 11.
  • 12. Что было раньше ● Лицензия Bamboo на 5 агентов ● Как следствие, очередь из билдов ● Небольшой configuration drift ● Проблемы с автоматизацией процессов ● Продукт потерял актуальность
  • 14. Минус ограничения и стоимость SAAS
  • 16. Минус зависимость от стека технологий
  • 17. Минус трамвай из буханки хлеба
  • 19.
  • 20. Артефакт поставки: было ● Деплой API в ZIP-архиве ● 40% деплоя в rpm ● 50% деплоя в контейнерах
  • 21. Артефакт поставки: проблемы ● А как деплоить новый сервис X? ● Недо-автоматизация процессов ● Segmentation faults из-за обновления opcache в PHP
  • 22. Артефакт поставки: стало Все в сад контейнеры ● Стандартизация сборки и поставки ● Гибкость разработки ● Простота и понятность ● Масштабируемость сервиса
  • 23. Тесты API: было Dev-сервера с базами данных ● Зависимость от тестовых данных ● Быстрое захламление данными ● Долгое время выполнения тестов
  • 24. Тесты API: стало Docker-compose с контейнерами БД ● Быстрый старт тестирования ● Независимость от платформы ● Сокращение времени pipeline с 30 до 10 минут ...однако есть проблема с concurrency
  • 25. Docker-Compose + Jenkins: реализация ● Поднимаем новые ноды перед тестами ● Тэггируем их именем билда ● Инициализируем compose-окружение ● Накатываем тестовые данные ● Параллельно прогоняем пакеты тестов ● Убиваем compose-окружение ● Снимаем тег для использования в последующих билдах
  • 26. Инструментарий деплоя: было ● Часть сервисов на Ansible + IPtables + conntrack ● Часть сервисов на Amazon Elastic Beanstalk ● Что-то вообще деплоили руками ○ со временем завернули в Ansible
  • 27. Инструментарий деплоя: проблемы Ansible + IPtables + Conntrack ● Некорректная обработка unreachable-хостов ● Пятисотки от Docker API ● Нельзя остановить деплой ● Отсутствие параллелизации внутри одного хоста Beanstalk ● Медленный деплой ● Множество ограничений и подводных камней ● Неуместные CloudFormation-стеки
  • 28. Главная проблема остается А как деплоить новый сервис X?
  • 30. ECS: базовые концепции ● Cluster → Service → Task ● Task Definition в JSON ● ECS-агент для контроля хостов ● Application Load Balancer для контроля трафика ● Task placement strategy для распределения контейнеров ● Min/max healthy percentage для конфигурации деплоя ● Autoscaling задач по Cloudwatch alarms
  • 31. ECS: текущее состояние ● 5 кластеров ● 18 сервисов ● 100-150 контейнеров
  • 32. Проблемы текущего подхода ● Подводные камни в масштабировании ● Отсутствие Service Discovery ● Отсутствие инструмента деплоя от Amazon ○ Альтернатива - ecs-deploy
  • 33. Чем помогает Jenkins ● Автоматизация инициализации агентов (EC2 plugin) ● Описание pipeline в коде (Groovy) ● Большая база плагинов ● Отсутствие ограничений по concurrency- билдам ● Open-source software как экономия ● Потрясная интеграция с Github
  • 34. Чем не помогает Jenkins ● Нельзя строить интеграцию с ECS и Beanstalk в pipeline ● Концепции билда и деплоя не разделены
  • 35. Чем вредит Jenkins ● Бесконечные апдейты бесконечного числа плагинов ● Подводные камни в Groovy ● Отсутствие обработки ошибок плагинов ● Периодические аномалии, за которые стыдно ○ решается рестартом
  • 36. Выводы ● Релиз-инжиниринг - задача из разряда “сделай сам” ● Легко наступить в “культ карго” - сложно выбраться ● Сложность delivery-pipeline и вашего приложения коррелируются ● Однако все это очень интересно