SlideShare a Scribd company logo
Непрерывное развертывание .Net Core
приложений и инфраструктуры в Linux среде
Ветчинкин Кирилл
https://www.facebook.com/k.vetchinkin
system-komkon@yandex.ru
1
О себе
12
Месяцев с
.net Core на
Prod
6
Месяцев c
ОС Linux на
Prod
4
Проекта на
.net Core+Linux
2
План доклада
• Рассмотрим проблемы разработки и поставки
• Рассмотрим способы их решения
• Поговорим про Windows/Linux
• Практические примеры(тестовая среда,
создание, настройка, деплой и т.п.)
3
Проблемы разработки и поставки ПО
4
На моем компьютере это работает
it works on my machine
5
Единый тестовый стенд
6
Ручные операции/инструкции для Ops
7
Создать и настроить 20 машин
Через неделю будет готово
8
Создать их идентичными и не ошибиться
UNREAL
9
Давайте решим все
эти проблемы!
10
На моем компьютере это работает
it works on my machine
Develop
Dev
Production
11
Решение – добавляем CI
Develop Integration/Test Production
Dev
12
Пересборка для каждой среды
Develop Integration/Test Production
Dev
Из masterИз dev
13
Решение – добавляем CD
Develop Integration/Test Staging
Dev
Production 14
Единый тестовый стенд
QA
Develop
QA
Dev
- “Ты тестируй,
а я подожду”
Integration/Test Staging Production
- “Он опять
все стер”
15
Решение - локальные тестовые среды
Develop
Dev
Integration/Test Staging Production
Test
QA
Test
QA
QA QA
16
Ручные операции/инструкции для Ops
QA
Develop
Dev
Ops
- “Я
протестировал.
Все ок”
- “Ой!
Я забыл сделать
это на Prod”
- “Сменю-ка я
название базы
на Integration
сервере”
Integration/Test Staging Production 17
Решение - добавляем Infrastructure as code
Develop
Dev
Test
QA
Integration/Test Staging Production
Test
Ops
Ops Ops
18
Общее окружение для всех приложений
Develop
Dev
- “Я приложение A
на .net Core 2.0
перевел”
Ops
- “Я конфиги nginx
правил для
приложения B. Теперь
не работают A и C”
Integration/Test Staging Production 19
Решение - добавляем Docker
Develop
DevTest
QA
Integration/Test Staging Production 20
Как это реализовать на Windows?
21
1. Купить Windows Server 2014(323 848 руб.)
2. Купить MS Sql Server 2014 (374 502 руб.)
3. Купить Azure подписку для VM на Windows
(x3 по сравнению с Linux)
Купили? – теперь попробуйте настроить
22
Как это реализовать на Linux?
23
Переход на Linux
24
0$
0$
0$
И нам показалось, что это очень круто
25
Тестовая среда
Test
QA
26
Что мы от нее ожидаем
• Убивается/создается «с кнопки»
• Вся конфигурация в Git
• Каждый тестировщик работает независимо со
своей средой
• Настроена теми же скриптами что и
Integration/Staging/Production(а значит равна им)
27
Технологии
28
Что делает Vagrant, Virtual Box
• Создает минимально настроенную виртуальную
машину
• По сути это просто конфиг для VM
29
Что делает Ansible
• Настройка ОС(ufw, mc и т.п.)
• Установка Docker, Docker Swarm
• Pull Docker Images
• Run/Stop/Remove Docker containers
30
Что делает Docker
• Удобная доставка обновлений
• Изолированная работа приложений
31
Связь Ansibe и Docker
32
Тестовая среда для QA
Test
QA
Pull + Run
33
Тестовая среда для Ops
Test
Ops
Sync
"../Ansible"“/home/ubuntu/ansible"
Run and check
34
Тестовая среда для Dev
Test
Run
192.168.33.10
Use
Use
Dev
35
Все участники работают ради общей цели
36
Команды Vagrant
• “vagrant up” – создать машину
• “vagrant destroy –f” – убить машину
37
Команды Ansible
• “ansible-playbook –i inventories/test main.yml “
– настроить машину
• “ansible-playbook –i inventories/test deploy.yml
– deploy Docker контейнеров
38
Демо – создание тестовой среды
39
https://youtu.be/OzcJ7tb3nFE
Демо – настройка и деплой на тест
40
https://youtu.be/HVxQOX6wCYE
Vagrant - что внутри
Ubuntu 16.04
Static IP
Ports
Apps
Sync folder Ansible
41
Ansible – что внутри
Среды
42
Ansible – что внутри
Роли
43
Docker – что внутри
Базовый образ
Приложение
Пульс
Скрипт запуска
44
Deploy на Integration/Staging/Production
ansible-playbook -i inventories/integration main.yml
ansible-playbook -i inventories/stage main.yml
ansible-playbook -i inventories/production main.yml
45
Docker Swarm
46
HEALTHCHECK
--interval=30s 
--timeout=3s 
CMD curl -f
http://localhost:8500/swagger
/ui/index.html || exit 1
Docker Swarm + Ansible
47
ansible-playbook -i inventories/stage main.yml
Базовая инфраструктура(ufw и т.п)
Docker + Registry connect
Docker Swarm
0/11/22/31/12/23/3
Демо – CI/CD инфраструктуры
48
https://youtu.be/-iGMScCJNac
Демо – CI/CD Docker
49
https://youtu.be/wfXzTvL15kg
Итоги
• На моем компьютере это работает
• Пересборка для каждой среды
• Единый тестовый стенд
• Ручные операции/инструкции для Ops
• Общее окружение для всех приложений
Выводы
51
Контроль
• Приложение – код
• Схема БД – код
• Авто тесты – код
• Инфраструктура – код
• CI/CD – код(TC*)
52
Скорость
• Интеграция/деплой при каждом
коммите
• Любое количество сред и машин
• Настройка машины – 5-7 минут
• Деплой – 1-3 минуты
53
Уверенность
• Частый деплой
• Частое создание/убийство сред
• Тестирование инфраструктуры
• Тестирование конвеера
• Тестирование кода
• Повторяемость
• Все среды одинаковы
54
Выгода
• Linux, PostgreSql = 0$
• Azure Linux VM дешевле Windows VM в
3 раза
• 10 минут работы машины дешевле 2
дней работы Ops руками в 96 раз
55
.Net Core на ОС Linux
«.Net Core на ОС Linux – это полностью
контролируемый, быстрый, надежный
процесс разработки и поставки ПО и в
∞ раз дешевле чем на Windows»
56
Ветчинкин Кирилл
https://www.facebook.com/k.vetchinkin
system-komkon@yandex.ru
Вопросы и ответы
57

More Related Content

What's hot

Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
Daria Oreshkina
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
Сергей Ладыгин
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
Ruslan Sharipov
 

What's hot (20)

Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
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
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»Артём Ерошенко «Рецепт приготовления облачных тестингов»
Артём Ерошенко «Рецепт приготовления облачных тестингов»
 
Docker - быстро, просто, наглядно
Docker - быстро, просто, наглядноDocker - быстро, просто, наглядно
Docker - быстро, просто, наглядно
 
Docker. Основы
Docker. ОсновыDocker. Основы
Docker. Основы
 
Docker for JS people
Docker for JS peopleDocker for JS people
Docker for JS people
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание среды
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
 
Ansible in the enterprise
Ansible in the enterpriseAnsible in the enterprise
Ansible in the enterprise
 
Кратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русскиКратчайшее введение в docker по-русски
Кратчайшее введение в docker по-русски
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
 
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)Путь DevOps в «Parallels» / Константин Назаров (Parallels)
Путь DevOps в «Parallels» / Константин Назаров (Parallels)
 
Введение в Docker
Введение в Docker Введение в Docker
Введение в Docker
 
Docker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоватьсяDocker : что это, зачем, и как им пользоваться
Docker : что это, зачем, и как им пользоваться
 
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
Продуктовые проблемы при создании очередной Docker PaaS / Владимир Ярцев (Cas...
 
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
Самоорганизующаяся сервисная инфраструктура на базе Docker / Данила Штань (То...
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
 

Similar to Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением автоматизации

Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
Alexander Kirillov
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
Anton Turetsky
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
Badoo Development
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Ontico
 

Similar to Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением автоматизации (20)

Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Виртуализация как инструмент разработчика
Виртуализация как инструмент разработчикаВиртуализация как инструмент разработчика
Виртуализация как инструмент разработчика
 
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
Andrii Medvedchuk "Kubernetes and Docker Basics for Running Web Apps"
 
Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)Непрерывная интеграция при разработке баз данных. (Show version)
Непрерывная интеграция при разработке баз данных. (Show version)
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблем
 
Контейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблемКонтейнеры в OpenStack: простое решение сложных проблем
Контейнеры в OpenStack: простое решение сложных проблем
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Froglogic Squish
Froglogic Squish Froglogic Squish
Froglogic Squish
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
"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...
 
Codeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышлоCodeception + Docker + Robo и что из этого вышло
Codeception + Docker + Robo и что из этого вышло
 
Vagrant и chef. от dev до deploy
Vagrant и chef. от dev до deployVagrant и chef. от dev до deploy
Vagrant и chef. от dev до deploy
 

More from MskDotNet Community

Николай Гусев «Функциональное программирование для C# разработчиков»
 Николай Гусев «Функциональное программирование для C# разработчиков» Николай Гусев «Функциональное программирование для C# разработчиков»
Николай Гусев «Функциональное программирование для C# разработчиков»
MskDotNet Community
 

More from MskDotNet Community (19)

Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»Антон Сысоев «IIoT: на границе HW и .NET»
Антон Сысоев «IIoT: на границе HW и .NET»
 
Николай Гусев «Функциональное программирование для C# разработчиков»
 Николай Гусев «Функциональное программирование для C# разработчиков» Николай Гусев «Функциональное программирование для C# разработчиков»
Николай Гусев «Функциональное программирование для C# разработчиков»
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 
Владимир Кочетков "OWASP TOP 10 для.NET"
Владимир Кочетков  "OWASP TOP 10 для.NET"Владимир Кочетков  "OWASP TOP 10 для.NET"
Владимир Кочетков "OWASP TOP 10 для.NET"
 
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиковДмитрий Сошников    Искусственный интеллект и нейросети для .NET-разработчиков
Дмитрий Сошников Искусственный интеллект и нейросети для .NET-разработчиков
 
Викторина MskDotNet Субботник
Викторина MskDotNet СубботникВикторина MskDotNet Субботник
Викторина MskDotNet Субботник
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
 
Иван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языковИван Кочуркин. Теория и практика парсинга формальных языков
Иван Кочуркин. Теория и практика парсинга формальных языков
 
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...Дмитрий Тежельников  «Разработка вэб-решений с использованием Asp.NET.Core и ...
Дмитрий Тежельников «Разработка вэб-решений с использованием Asp.NET.Core и ...
 
Павел Притчин "Конфигурации в.NET"
Павел Притчин  "Конфигурации в.NET"Павел Притчин  "Конфигурации в.NET"
Павел Притчин "Конфигурации в.NET"
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере" Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
Даниил Соколюк "ReactJS.NET — опыт рендеринга на сервере"
 
Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"Андрей Матвеев "Основные принципы микросервисов и их реализации"
Андрей Матвеев "Основные принципы микросервисов и их реализации"
 
Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»Александр Сурков «Вещи» в «Интернете вещей»
Александр Сурков «Вещи» в «Интернете вещей»
 
Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»Петр Тимошевский «Industrial IoT на практике»
Петр Тимошевский «Industrial IoT на практике»
 
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
Стас Павлов «Построение безопасной архитектуры IoT решений на примере Azure I...
 
Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»Илья Ефимов «IoC/DI на примере Autofac»
Илья Ефимов «IoC/DI на примере Autofac»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»Владимир Кошелев «Автоматический поиск ошибок»
Владимир Кошелев «Автоматический поиск ошибок»
 

Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением автоматизации