SlideShare a Scribd company logo
1 of 26
Как мы собираем проекты в выделенном
окружении в Windows Docker
Алексей Буров
CI-инженер
aburov@ptsecurity.com
Содержание
1. Как было раньше
2. Проблемы
3. Решение
4. С чем столкнулись
Про текущие процессы
Что мы имеем
• Компания по разработке ПО
• Увеличивающееся количество продуктов
• Требуется различное сборочное окружение для команд
• Группа поддержки процессов Continuous Integration
• Поддержка новых и старых релизов
Как было раньше
• Группировка проектов по используемым технологиям
• Создание идентичного окружения на пуле серверов
• Процесс изменения окружения:
• Изменения вносятся вручную на одном сборочном сервере
• Смотрим, что ничего не сломалось
• Вносим изменения на все сервера
• Чиним то, что сломалось позже
• Делается для экономии ресурсов и отказоустойчивости
• Используется 2 сервера:
• 16CPU
• 256GB RAM
• SSD ~ 3TB
Проблема
Как поддерживать зоопарк окружения
Проблемы
1. Сборочное окружение ломается
2. Командам нужно изменять окружение самостоятельно
3. Иногда не соблюдается требование отказоустойчивости
4. Не сохраняется сборочное окружение прошлых релизов
5. Неполная утилизация ресурсов виртуальных машин
Решение
Windows Docker
Долгожданный
• Docker показал себя эффективным инструментом для решения озвученных
проблем
• Опыт работы в системе сборки с Docker Linux > 4 лет
• Своя инфраструктура Docker Registry (Artifactory)
• Windows Docker анонсирован в сентябре 2016 года
Сложность установки ПО: но это же Windows
• Linux
• Windows (Пример отсюда)
Сложность установки ПО: облегчаем жизнь
Упрощаем
Сложность установки ПО: облегчаем жизнь
Размер ПО: делаем как в Linux
Linux
• У каждой команды свой docker образ (и не один)
• У каждой компоненты может быть свой docker образ
• Допускается создание фича-веток docker образов
• На сборочных серверах вычищаются все docker образы по ночам
Размер ПО: делаем как в Linux
Критерий Linux Windows
Размер образа с основным
набором ПО для компиляции
до 5 GB до 45 GB
Среднее время сборки образа с
нуля
до 20 минут до 70 минут
Среднее время pull до 3 минуты до 50 минут
Размер ПО: делаем по своему
Windows
• Есть базовые образы, с предустановленным часто используемым ПО
o Python
o Visual Studio Build Tools
o SDKs
• У каждой команды есть свой образ, где они могут добавлять ПО
• Тестирование новых образов происходит строго на одном сервере
• Docker образы очищаются редко, практически вручную
Размер ПО: делаем по своему
vc140
Visual Studio 2015
SDKs
Other
vc150
Visual Studio 2017
SDKs
Other
team1
FROM: vc140
PostgreSQL
Python 3.6 x64
team2
FROM: vc150
.NET Core 2.0
Python 2.7 x86
Процесс внесения изменений: установка ПО
• Сохранить exemsi на сервер по адресу yourstorage.example.ru/win/packages
— храним установщики, чтобы меньше зависить от интернета (не всегда
получается, как, например, с msbuild-tools)
• С помощью USSF (Universal Silent Switch Finder) найти ключи для установки
в silent mode
• Добавляем строчку с помощью скрипта install-web.ps1 (или download-and-
unpack) по аналогии с существующими
Примеры Dockerfile доступны по ссылке: github.com/allburov/docker-windows
Прочие особенности Windows Docker
GetFinalPathNameByHandle
• GetFinalPathNameByHandle отображает относительные и прочие пути в
полный путь используя ? синтаксис
• Неправильно отображает подключенные пути
260 символов хватит всем
• Win32 API MAX_PATH=260 — имя файла не больше 260 символов
• В Windows Docker проблема появляется. Если к запускаемому докеру
подключать директорию, то она подключается как symlink
• c:build =>
• ?ContainerMappedDirectories30FA5B39-9158-4785-A3A9-0435BFF32D2B
• Даже если в хостовой системе путь допустимый и меньше 260 символов, то
в docker он превращается в более длинный путь
• Обещали в локальных политиках дать возможность отключить ограничение
на количество символов в имени
У каждого слоя свой hostname
Проблема установки служб
1. Устанавливается в слое rabbitmq
2. В следующем — запускается
3. Проходят еще шаги
4. Запускается контейнер — но у него уже другой hostname
5. Rabbitmq отказывается запускаться
Hostname mismatch: node "rabbit@202fd51f02fd" believes its host is different.
Please ensure that hostnames resolve the same way locally and on
"rabbit@202fd51f02fd"
Silent install & GUI
Не всё ПО поддерживает Silent install mode
• gvim (vim для Windows) — ранее не поддерживал silent-установку,
пришлось править инсталлятор
Не всё ПО (даже установщик) может работать без интерфейса
• NET SDK 4.0 — устанавливается только в GUI-режиме
Что дальше
Дальнейшее развитие
1. Версионирование docker образов
• Нужно для сохранения при релизах наших продуктов
2. Устанавливать продукты в docker и запускать интеграционные тесты
3. Поставлять dev-окружение контейнерами
4. Поставлять production docker образы
Текст доклада и примеры Dockerfile: github.com/allburov/docker-windows
Итоги
1. Как было раньше
• только группа Continuous Integration имеет доступ к серверам
2. Проблемы
• долго
• ломалось и нет версионирования
• неэкономно
3. Решение
• упрощение установки — скрипты, фиксированный процесс
• своя схема для Windows
4. С чем столкнулись
• Symbolic Links
• Silent install mode
Спасибо!
Вопросы?
Алексей Буров
CI-инженер
aburov@ptsecurity.com

More Related Content

What's hot

Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsSQALab
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)aviatakz
 
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Ontico
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияCOMAQA.BY
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Ontico
 
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС DevDay
 
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для MacКонстантин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac404fest
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков2ГИС Технологии
 
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)Ontico
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QASQALab
 
Автоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CАвтоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CAlexey Lustin
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Ontico
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаSQALab
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationCOMAQA.BY
 
Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Sergey Chudakov
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаSQALab
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Alexander Babich
 

What's hot (19)

Winium — это как Selenium, только под Windows
Winium — это как Selenium, только под WindowsWinium — это как Selenium, только под Windows
Winium — это как Selenium, только под Windows
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)Python tools for web development (Python meetup Almaty #ALAPY)
Python tools for web development (Python meetup Almaty #ALAPY)
 
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)
 
Готовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации ТестированияГотовим Docker для Автоматизации Тестирования
Готовим Docker для Автоматизации Тестирования
 
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)Highway to Сontinuous Integration, Денис Трифонов (2GIS)
Highway to Сontinuous Integration, Денис Трифонов (2GIS)
 
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
 
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для MacКонстантин Назаров – Распараллеливание сборки Parallels Desktop для Mac
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac
 
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
«GitHub Flow — немного сложнее, чем на бумаге», Александр Бирюков
 
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
Как подружить команду админов с N командами разработки / Денис Яковлев (2ГИС)
 
Как Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QAКак Cluster Membership Software может помочь QA
Как Cluster Membership Software может помочь QA
 
Автоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1CАвтоматическая сборка и развертывание на платформе 1C
Автоматическая сборка и развертывание на платформе 1C
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
Инструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщикаИнструментация среды исполнения в арсенале тестировщика
Инструментация среды исполнения в арсенале тестировщика
 
Docker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous IntegrationDocker + Selenium Webdriver в рамках Continuous Integration
Docker + Selenium Webdriver в рамках Continuous Integration
 
Continuousdelivery
ContinuousdeliveryContinuousdelivery
Continuousdelivery
 
Презентация Git-flow (на русском)
Презентация Git-flow (на русском)Презентация Git-flow (на русском)
Презентация Git-flow (на русском)
 
Тестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях ИнтернетаТестируем мобильное приложение в суровых реалиях Интернета
Тестируем мобильное приложение в суровых реалиях Интернета
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 

Similar to Как мы собираем проекты в выделенном окружении в Windows Docker

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_confMax Glekov
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...MskDotNet Community
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Ontico
 
"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
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на DockerМихаил Бакулин
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годAnton Turetsky
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годBadoo Development
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Ontico
 
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
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...it-people
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Ruslan Sharipov
 
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разRootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разTimur Batyrshin
 
Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...
Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...
Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...Ontico
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиOleg Nenashev
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе dockerIvan Grishaev
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеAndrey Kazarinov
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 

Similar to Как мы собираем проекты в выделенном окружении в Windows Docker (20)

Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
presentation_r00t_conf
presentation_r00t_confpresentation_r00t_conf
presentation_r00t_conf
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
Релиз инжиниринг Mail.ru, взгляд изнутри / Максим Глеков (Mail.Ru Group)
 
"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...
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Локальное окружение на Docker
Локальное окружение на DockerЛокальное окружение на Docker
Локальное окружение на Docker
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через годDocker в работе: взгляд на использование в Badoo через год
Docker в работе: взгляд на использование в Badoo через год
 
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
Docker в работе: взгляд на его использование в Badoo через год / Турецкий Ант...
 
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
 
"Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно..."Девопс - это не только для программистов. Практические примеры из жизни одно...
"Девопс - это не только для программистов. Практические примеры из жизни одно...
 
Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?Docker - счастье для хомячка или ника?
Docker - счастье для хомячка или ника?
 
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько разRootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
RootConf 2015: Как Vagrant и Chef ускорили разработку в несколько раз
 
Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...
Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...
Как Vagrant и Chef ускорили разработку в несколько раз / Тимур Батыршин (Cina...
 
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. ВнутренностиSPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
SPb Jenkins Meetup #5. Jenkins in da Cloud. Внутренности
 
Ci на базе docker
Ci на базе dockerCi на базе docker
Ci на базе docker
 
Непрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в ЯндексеНепрерывная интеграция Python-проектов в Яндексе
Непрерывная интеграция Python-проектов в Яндексе
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 

More from Positive Hack Days

Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQubePositive Hack Days
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Positive Hack Days
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для ApproofPositive Hack Days
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Positive Hack Days
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложенийPositive Hack Days
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложенийPositive Hack Days
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application SecurityPositive Hack Days
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack Days
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack Days
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОPositive Hack Days
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CorePositive Hack Days
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опытPositive Hack Days
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterPositive Hack Days
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиPositive Hack Days
 
Практический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов БанкаПрактический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов БанкаPositive Hack Days
 
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Positive Hack Days
 
Эффективный контроль сотрудников
Эффективный контроль сотрудниковЭффективный контроль сотрудников
Эффективный контроль сотрудниковPositive Hack Days
 
Подход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterpriseПодход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterprisePositive Hack Days
 

More from Positive Hack Days (20)

Использование анализатора кода SonarQube
Использование анализатора кода SonarQubeИспользование анализатора кода SonarQube
Использование анализатора кода SonarQube
 
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
Методика определения неиспользуемых ресурсов виртуальных машин и автоматизаци...
 
Автоматизация построения правил для Approof
Автоматизация построения правил для ApproofАвтоматизация построения правил для Approof
Автоматизация построения правил для Approof
 
Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»Мастер-класс «Трущобы Application Security»
Мастер-класс «Трущобы Application Security»
 
Формальные методы защиты приложений
Формальные методы защиты приложенийФормальные методы защиты приложений
Формальные методы защиты приложений
 
Эвристические методы защиты приложений
Эвристические методы защиты приложенийЭвристические методы защиты приложений
Эвристические методы защиты приложений
 
Теоретические основы Application Security
Теоретические основы Application SecurityТеоретические основы Application Security
Теоретические основы Application Security
 
От экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 летОт экспериментального программирования к промышленному: путь длиной в 10 лет
От экспериментального программирования к промышленному: путь длиной в 10 лет
 
Уязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на граблиУязвимое Android-приложение: N проверенных способов наступить на грабли
Уязвимое Android-приложение: N проверенных способов наступить на грабли
 
Требования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПОТребования по безопасности в архитектуре ПО
Требования по безопасности в архитектуре ПО
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Механизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET CoreМеханизмы предотвращения атак в ASP.NET Core
Механизмы предотвращения атак в ASP.NET Core
 
SOC для КИИ: израильский опыт
SOC для КИИ: израильский опытSOC для КИИ: израильский опыт
SOC для КИИ: израильский опыт
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
Credential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атакиCredential stuffing и брутфорс-атаки
Credential stuffing и брутфорс-атаки
 
Доклад SiteSecure
Доклад SiteSecureДоклад SiteSecure
Доклад SiteSecure
 
Практический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов БанкаПрактический опыт защиты финансовых транзакций клиентов Банка
Практический опыт защиты финансовых транзакций клиентов Банка
 
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...
 
Эффективный контроль сотрудников
Эффективный контроль сотрудниковЭффективный контроль сотрудников
Эффективный контроль сотрудников
 
Подход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в EnterpriseПодход к обеспечению безопасности IoT в Enterprise
Подход к обеспечению безопасности IoT в Enterprise
 

Как мы собираем проекты в выделенном окружении в Windows Docker

  • 1. Как мы собираем проекты в выделенном окружении в Windows Docker Алексей Буров CI-инженер aburov@ptsecurity.com
  • 2. Содержание 1. Как было раньше 2. Проблемы 3. Решение 4. С чем столкнулись
  • 4. Что мы имеем • Компания по разработке ПО • Увеличивающееся количество продуктов • Требуется различное сборочное окружение для команд • Группа поддержки процессов Continuous Integration • Поддержка новых и старых релизов
  • 5. Как было раньше • Группировка проектов по используемым технологиям • Создание идентичного окружения на пуле серверов • Процесс изменения окружения: • Изменения вносятся вручную на одном сборочном сервере • Смотрим, что ничего не сломалось • Вносим изменения на все сервера • Чиним то, что сломалось позже • Делается для экономии ресурсов и отказоустойчивости • Используется 2 сервера: • 16CPU • 256GB RAM • SSD ~ 3TB
  • 7. Проблемы 1. Сборочное окружение ломается 2. Командам нужно изменять окружение самостоятельно 3. Иногда не соблюдается требование отказоустойчивости 4. Не сохраняется сборочное окружение прошлых релизов 5. Неполная утилизация ресурсов виртуальных машин
  • 9. Долгожданный • Docker показал себя эффективным инструментом для решения озвученных проблем • Опыт работы в системе сборки с Docker Linux > 4 лет • Своя инфраструктура Docker Registry (Artifactory) • Windows Docker анонсирован в сентябре 2016 года
  • 10. Сложность установки ПО: но это же Windows • Linux • Windows (Пример отсюда)
  • 11. Сложность установки ПО: облегчаем жизнь Упрощаем
  • 12. Сложность установки ПО: облегчаем жизнь
  • 13. Размер ПО: делаем как в Linux Linux • У каждой команды свой docker образ (и не один) • У каждой компоненты может быть свой docker образ • Допускается создание фича-веток docker образов • На сборочных серверах вычищаются все docker образы по ночам
  • 14. Размер ПО: делаем как в Linux Критерий Linux Windows Размер образа с основным набором ПО для компиляции до 5 GB до 45 GB Среднее время сборки образа с нуля до 20 минут до 70 минут Среднее время pull до 3 минуты до 50 минут
  • 15. Размер ПО: делаем по своему Windows • Есть базовые образы, с предустановленным часто используемым ПО o Python o Visual Studio Build Tools o SDKs • У каждой команды есть свой образ, где они могут добавлять ПО • Тестирование новых образов происходит строго на одном сервере • Docker образы очищаются редко, практически вручную
  • 16. Размер ПО: делаем по своему vc140 Visual Studio 2015 SDKs Other vc150 Visual Studio 2017 SDKs Other team1 FROM: vc140 PostgreSQL Python 3.6 x64 team2 FROM: vc150 .NET Core 2.0 Python 2.7 x86
  • 17. Процесс внесения изменений: установка ПО • Сохранить exemsi на сервер по адресу yourstorage.example.ru/win/packages — храним установщики, чтобы меньше зависить от интернета (не всегда получается, как, например, с msbuild-tools) • С помощью USSF (Universal Silent Switch Finder) найти ключи для установки в silent mode • Добавляем строчку с помощью скрипта install-web.ps1 (или download-and- unpack) по аналогии с существующими Примеры Dockerfile доступны по ссылке: github.com/allburov/docker-windows
  • 19. GetFinalPathNameByHandle • GetFinalPathNameByHandle отображает относительные и прочие пути в полный путь используя ? синтаксис • Неправильно отображает подключенные пути
  • 20. 260 символов хватит всем • Win32 API MAX_PATH=260 — имя файла не больше 260 символов • В Windows Docker проблема появляется. Если к запускаемому докеру подключать директорию, то она подключается как symlink • c:build => • ?ContainerMappedDirectories30FA5B39-9158-4785-A3A9-0435BFF32D2B • Даже если в хостовой системе путь допустимый и меньше 260 символов, то в docker он превращается в более длинный путь • Обещали в локальных политиках дать возможность отключить ограничение на количество символов в имени
  • 21. У каждого слоя свой hostname Проблема установки служб 1. Устанавливается в слое rabbitmq 2. В следующем — запускается 3. Проходят еще шаги 4. Запускается контейнер — но у него уже другой hostname 5. Rabbitmq отказывается запускаться Hostname mismatch: node "rabbit@202fd51f02fd" believes its host is different. Please ensure that hostnames resolve the same way locally and on "rabbit@202fd51f02fd"
  • 22. Silent install & GUI Не всё ПО поддерживает Silent install mode • gvim (vim для Windows) — ранее не поддерживал silent-установку, пришлось править инсталлятор Не всё ПО (даже установщик) может работать без интерфейса • NET SDK 4.0 — устанавливается только в GUI-режиме
  • 24. Дальнейшее развитие 1. Версионирование docker образов • Нужно для сохранения при релизах наших продуктов 2. Устанавливать продукты в docker и запускать интеграционные тесты 3. Поставлять dev-окружение контейнерами 4. Поставлять production docker образы Текст доклада и примеры Dockerfile: github.com/allburov/docker-windows
  • 25. Итоги 1. Как было раньше • только группа Continuous Integration имеет доступ к серверам 2. Проблемы • долго • ломалось и нет версионирования • неэкономно 3. Решение • упрощение установки — скрипты, фиксированный процесс • своя схема для Windows 4. С чем столкнулись • Symbolic Links • Silent install mode