1. Проблемы в построении CI процессов в компании
2. Структура типовой сборки
3. Пример реализации типовой сборки
4. Плюсы и минусы от использования типовой сборки
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days1. Обзор Windows Docker (кратко)
2. Как мы построили систему билда приложений в Docker (Visual Studio\Mongo\Posgresql\etc)
3. Примеры Dockerfile (выложенные на github)
4. Отличия процессов DockerWindows от DockerLinux (Долгий билд, баги, remote-регистр.)
Развитие сообщества Open DevOps CommunityPositive Hack Days1. Обзор инструментов в сообществе DevOpsHQ: https://github.com/devopshq и решаемые ими проблемы.
2. Планы развития сообщества DevOpsHQ.
Инструмент ChangelogBuilder для автоматической подготовки Release NotesPositive Hack Days1. Основные понятия и определения: продукт, пакет, связи между ними.
2. Как узнать, какие изменения произошли в продукте?
3. Проблемы changelog и release note.
4. Решение: инструмент ChangelogBuilder для автоматической подготовки Release Notes
Аналитика в проектах: TFS + QlikPositive Hack Days1. Что такое BI. Зачем он нужен.
2. Что такое Qlik View / Sense
3. Способ интеграции. Как это работает.
4. Метрики, KPI, планирование ресурсов команд, ретроспектива релиза продукта, тренды.
5. Подключение внешних источников данных (Excel, БД СКУД, переговорные комнаты).
Использование анализатора кода SonarQubePositive Hack Days1. Для чего нужны анализаторы кода
2. Что такое SonarQube
3. Принципе работы
4. Поддержка языков
5. Что находит
6. Метрики, снимаемые с кода
Docker + Selenium Webdriver в рамках Continuous IntegrationSQALabДоклад Антанаса Мачярниса на конференции SQA Days-18, 27-28 ноября 2015 г., Москва
www.sqadays.com
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)OnticoРИТ++ 2017, Root Conf
Зал Пекин + Шанхай, 5 июня, 10:00
Тезисы:
http://rootconf.ru/2017/abstracts/2830.html
Про DevOps, как и про Agile, сейчас говорят все, но все равно ничего не понятно. Часто послушаешь доклад и ощущение, что все в компании и так по DevOps, и не надо ничего делать, или, наоборот, ощущение, что это совершенно дикая история, и DevOps-практики категорически противопоказаны.
Мы не хотим рассказывать, что такое DevOps, а расскажем о мифах, которые вредят пониманию. Их не так много, но важно о них знать, потому что эти мифы для вас будут маркерами неправильных управленческих и инженерных решений:
1) DevOps может делать DevOps-отдел или DevOps-инженер.
2) DevOps — это про то, что надо нанимать специалистов-многостаночников, которые умеют все.
...
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевPositive Hack Days1. Сложности при распутывании перекрёстных и вложенных зависимостей.
2. Пакетный менеджер CrossPM. Его возможности и примеры использования.
3. Интеграция CrossPM и системы хранения пакетов Artifactory.
Автоматическая сборка и развертывание на платформе 1CAlexey Lustin1. Непрерывная интеграция функционала. Методическая практика развертыванияпродукта. Блоки работ необходимые к проведению в рамках передачи релиза конфигурации в production эксплуатацию. Методические рекомендации фирмы 1С по подготовке продукта к непрерывной интеграции.
2. Способы реализации этапов непрерывной интеграции функционала на платформе 1С и сервере непрерывной интеграции
3. Особенности прохождения этапов сборки и развертывания в зависимости от типа задачи - исправление ошибок, изменение кода, изменение структуры метаданных и т.д.
4. Типовые недочеты и способы их исправления в рамках автоматизированной сборки продукта и его последующего развертывания. Типовые сценарии отката развернутой функциональности
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac404festИдея доклада — рассказать об использовании Jenkins как не типичного инструмента для построения распределенной сборки продукта, зарабатывающего миллионы долларов. Мы поделимся секретами его адаптации под сборку билдов сложных систем/продуктов с многими компонентами и ускорения в разы этой задачи.
Наша проблема: линейная сборка продукта занимает 8 часов. А Jenkins «из коробки» не умеет собирать сложные иерархии. При этом писать код самостоятельно не хочется. В итоге мы придумали, как использовать существующий инструмент, пройдясь по нему напильником.
Кому будет интересно: Эти знания могут помочь людям, которые хотят построить эффективный CI, но не хотят тратить много времени на исследования.
Мы выложим наш код и материалы на GitHub. Это будет довольно практично.
Лайфхаки:
Используем Build Flow + Groovy скрипты чтобы оркестрировать сложную иерархию с параллельными ветвями и собирать результаты
Правильное использование префиксов в названиях job-ов помогают автоматизировать группировку по бранчам
Переиспользуем окружения сборки много раз, не удаляя их
Предыдущий пункт в итоге оставляет за собой кучу мусора, которую мы периодически очищаем при помощи системных Groovy скриптов по job префиксу
Группировка большого количества job-ов в проекты и бранчи с использованием Nested View
Дамп и разворачивание job-ов из системы контроля версий по шаблону
Ну и взгляд в будущее: автоматический анализ билд проблем.
http://2014.404fest.ru/reports/jenkins/
Готовим Docker для Автоматизации ТестированияCOMAQA.BY Docker как технология уже давно и интенсивно используется на некоторых проектах. Этот доклад посвящен вариантам использования Docker-а для автоматизации тестирования на таких проектах, таким как: верификация деплоя микросервисов, построение изолированной среды для тестирования, мониторинг состояния продакшена.
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)OnticoHighLoad++ 2017
Зал «Пекин + Шанхай», 8 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2991.html
Нынче стало модно выделять UI-компоненты в отдельную библиотеку и использовать её в нескольких проектах. Мы в команде почты Mail.ru делаем так же, но столкнулись с проблемой: каждый разработчик, меняя библиотеку под свои нужды, обязательно ломает что-нибудь, что работало у других.
Я расскажу о том, как мы решили эту проблему, и о том, какие инструменты для этого можно использовать. Storybook, BackstopJS, Jest, Webdriver.io, TypeScript - в их числе.
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинPositive Hack Days1. VIX API против pysphere.
2. vSphereTools - это набор скриптов от DevOps для поддержки работы с vSphere и виртуальными машинами.
3. Описание инструмента, его достоинства и недостатки, возможные доработки.
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALabДоклад Олега Ненашева на конференции SQA Days-19, 20-21 мая 2016 г., Санкт-Петербург
Cтатические анализаторы систем 1с AgileDays 2015Alexey LustinДоклад на AgileDays2015 о способах оценки качества метаданных 1С с помощью OpenSource инструментария
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYPavel Tsukanovто такое "Непрерывная Интеграция", зачем она нужна и с чем ее едят? Правда ли, что она нужна только для тестировщиков? На все эти вопросы мы постараемся найти ответы в ходе выступления Щербакова Ильи на нашей следующей юзер-группе.
Docker + Selenium Webdriver в рамках Continuous IntegrationSQALabДоклад Антанаса Мачярниса на конференции SQA Days-18, 27-28 ноября 2015 г., Москва
www.sqadays.com
Мифы о DevOps / Александр Титов, Иван Евтухович (Экспресс 42)OnticoРИТ++ 2017, Root Conf
Зал Пекин + Шанхай, 5 июня, 10:00
Тезисы:
http://rootconf.ru/2017/abstracts/2830.html
Про DevOps, как и про Agile, сейчас говорят все, но все равно ничего не понятно. Часто послушаешь доклад и ощущение, что все в компании и так по DevOps, и не надо ничего делать, или, наоборот, ощущение, что это совершенно дикая история, и DevOps-практики категорически противопоказаны.
Мы не хотим рассказывать, что такое DevOps, а расскажем о мифах, которые вредят пониманию. Их не так много, но важно о них знать, потому что эти мифы для вас будут маркерами неправильных управленческих и инженерных решений:
1) DevOps может делать DevOps-отдел или DevOps-инженер.
2) DevOps — это про то, что надо нанимать специалистов-многостаночников, которые умеют все.
...
Пакетный менеджер CrossPM: упрощаем сложные зависимости | Александр КовалевPositive Hack Days1. Сложности при распутывании перекрёстных и вложенных зависимостей.
2. Пакетный менеджер CrossPM. Его возможности и примеры использования.
3. Интеграция CrossPM и системы хранения пакетов Artifactory.
Автоматическая сборка и развертывание на платформе 1CAlexey Lustin1. Непрерывная интеграция функционала. Методическая практика развертыванияпродукта. Блоки работ необходимые к проведению в рамках передачи релиза конфигурации в production эксплуатацию. Методические рекомендации фирмы 1С по подготовке продукта к непрерывной интеграции.
2. Способы реализации этапов непрерывной интеграции функционала на платформе 1С и сервере непрерывной интеграции
3. Особенности прохождения этапов сборки и развертывания в зависимости от типа задачи - исправление ошибок, изменение кода, изменение структуры метаданных и т.д.
4. Типовые недочеты и способы их исправления в рамках автоматизированной сборки продукта и его последующего развертывания. Типовые сценарии отката развернутой функциональности
Константин Назаров – Распараллеливание сборки Parallels Desktop для Mac404festИдея доклада — рассказать об использовании Jenkins как не типичного инструмента для построения распределенной сборки продукта, зарабатывающего миллионы долларов. Мы поделимся секретами его адаптации под сборку билдов сложных систем/продуктов с многими компонентами и ускорения в разы этой задачи.
Наша проблема: линейная сборка продукта занимает 8 часов. А Jenkins «из коробки» не умеет собирать сложные иерархии. При этом писать код самостоятельно не хочется. В итоге мы придумали, как использовать существующий инструмент, пройдясь по нему напильником.
Кому будет интересно: Эти знания могут помочь людям, которые хотят построить эффективный CI, но не хотят тратить много времени на исследования.
Мы выложим наш код и материалы на GitHub. Это будет довольно практично.
Лайфхаки:
Используем Build Flow + Groovy скрипты чтобы оркестрировать сложную иерархию с параллельными ветвями и собирать результаты
Правильное использование префиксов в названиях job-ов помогают автоматизировать группировку по бранчам
Переиспользуем окружения сборки много раз, не удаляя их
Предыдущий пункт в итоге оставляет за собой кучу мусора, которую мы периодически очищаем при помощи системных Groovy скриптов по job префиксу
Группировка большого количества job-ов в проекты и бранчи с использованием Nested View
Дамп и разворачивание job-ов из системы контроля версий по шаблону
Ну и взгляд в будущее: автоматический анализ билд проблем.
http://2014.404fest.ru/reports/jenkins/
Готовим Docker для Автоматизации ТестированияCOMAQA.BY Docker как технология уже давно и интенсивно используется на некоторых проектах. Этот доклад посвящен вариантам использования Docker-а для автоматизации тестирования на таких проектах, таким как: верификация деплоя микросервисов, построение изолированной среды для тестирования, мониторинг состояния продакшена.
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)OnticoHighLoad++ 2017
Зал «Пекин + Шанхай», 8 ноября, 17:00
Тезисы:
http://www.highload.ru/2017/abstracts/2991.html
Нынче стало модно выделять UI-компоненты в отдельную библиотеку и использовать её в нескольких проектах. Мы в команде почты Mail.ru делаем так же, но столкнулись с проблемой: каждый разработчик, меняя библиотеку под свои нужды, обязательно ломает что-нибудь, что работало у других.
Я расскажу о том, как мы решили эту проблему, и о том, какие инструменты для этого можно использовать. Storybook, BackstopJS, Jest, Webdriver.io, TypeScript - в их числе.
vSphereTools - инструмент для автоматизации работы с vSphere | Тимур ГильмуллинPositive Hack Days1. VIX API против pysphere.
2. vSphereTools - это набор скриптов от DevOps для поддержки работы с vSphere и виртуальными машинами.
3. Описание инструмента, его достоинства и недостатки, возможные доработки.
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALabДоклад Олега Ненашева на конференции SQA Days-19, 20-21 мая 2016 г., Санкт-Петербург
Cтатические анализаторы систем 1с AgileDays 2015Alexey LustinДоклад на AgileDays2015 о способах оценки качества метаданных 1С с помощью OpenSource инструментария
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYPavel Tsukanovто такое "Непрерывная Интеграция", зачем она нужна и с чем ее едят? Правда ли, что она нужна только для тестировщиков? На все эти вопросы мы постараемся найти ответы в ходе выступления Щербакова Ильи на нашей следующей юзер-группе.
Юрий Василевский «Автоматизация в XCode»YandexЮрий Василевский «Автоматизация в XCode»
Yandex Mobile Camp в Санкт-Петербурге 2012
http://events.yandex.ru/events/yamobcamp/spb-may-2012/
Xcode — основной инструментарий разработки приложений под Mac OS X и Apple iOS. Он обладает широкими возможностями как для редактирования кода, так и для автоматизации задач. Мы обсудим некоторые из аспектов автоматизации (Code Sense, Targets, Services, Help), связанные с нумерацией сборок билдов, форматированием и контролем стиля кода, анализом дублированных участков кода, управлением внешними библиотеками.
Юрий Василевский "Автоматизация в XCode"YandexYandex Mobile Camp в Санкт-Петербурге, 30 мая 2012
Юрий Василевский, ведущий разработчик EPAM Systems, Mobile Solutions
Тема: Автоматизация в XCode
Тезисы:
Xcode — основной инструментарий разработки приложений под Mac OS X и Apple iOS. Он обладает широкими возможностями как для редактирования кода, так и для автоматизации задач.
Мы рассмотрим некоторые из аспектов автоматизации (Code Sense, Targets, Services, Help), связанные с нумерацией сборок билдов, форматированием и контролем стиля кода, анализом дублированных участков кода, управлением внешними библиотеками.
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...ProvectusAleksandr Matkovskiy – Head of IT Department lives and works with the motto "Scaling and load balancing is our all!". Therefore, he has 3 sons and dreams to find DEV for his OPS.
You will be able to see how the CI / CD was created and saved our lives. From concept to the final product.
Vladislav Anikin – Team Leader & Software Architect, specializing in SAAS flexible and scalable solutions for business. Driving DDD/TDD oriented squad of awesome SOLID developers.
You will be able to see how the CI / CD was created and saved our lives. From concept to the final product.
Микросервисный фронтендViacheslav SlinkoПоследние несколько лет в продуктовой разработке проблемы масштабирования решаются через переход на микросервисную архитектуру. На эту тему было сказано много про подходы, плюсы и минусы, но мало кто рассматривал эту проблематику со стороны фронтенда.
В ЦИАН мы идем по пути перехода от монолита к микросервисам, в том числе и на фронтенде. Задачи и проблемы, с которыми мы сталкиваемся, очень близки к аналогичным на бэкенде, но в то же время совершенно другие.
В своем докладе я расскажу про архитектуру фронтенда (и так называемого миддленда) в ЦИАН: какие задачи перед нами стояли, что мы решили, где мы находимся сейчас и с какими проблемами мы столкнулись.
Микросервисный фронтенд / Вячеслав Слинько (ЦИАН)OnticoHighLoad++ 2017
Зал Дели + Калькутта, 7 ноября, 13:00
Тезисы:
http://www.highload.ru/2017/abstracts/2867.html
Последние несколько лет в продуктовой разработке проблемы масштабирования решаются через переход на микросервисную архитектуру. На эту тему было сказано много про подходы, плюсы и минусы, но мало кто рассматривал эту проблематику со стороны фронтенда.
В ЦИАН мы идем по пути перехода от монолита к микросервисам, в том числе и на фронтенде. Задачи и проблемы, с которыми мы сталкиваемся, очень близки к аналогичным на бэкенде, но в то же время совершенно другие.
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEEОб организации автоматизированного рабочего процесса в InterSystems Caché, Лебедюк /
Implementing modern developement practices with InterSystems Caché, Eduard Lebedyuk
Caché github continuous intergrationInterSystemsApproach on how make Continuous Integration development cycle with InterSystems Caché.
Caché Object Script solution for CI with Github
https://github.com/intersystems-ru/CacheGitHubCI
Проблемы и пути их решения при командной разработке проектовАгентство AlterEGO– Кому нужна командная разработка?
– Что делать в команде?
– Решение реальных задач, распределение ответственности
– Командная разработка на 1С-Битрикс
– Миграции БД
– Проблемы и пути их решения
Владимир Никонов "Вызовы при разработке enterprise продукта"FwdaysВ докладе мы рассмотрим этапы развития приложения, начиная от монолитного Web приложения, до распределенной платформы по управлению бизнес-процессами. Покажем этапы развития, задачи и вызовы, которые возникали на каждом их них. Проанализируем различные аспекты, влияющие на развитие архитектуры, такие как бизнес-требования, технологические тренды и возможные ограничения.
Автоматизация построения правил для ApproofPositive Hack DaysApproof — статический анализатор кода для проверки веб-приложений на наличие уязвимых компонентов. В своей работе анализатор основывается на правилах, хранящих сигнатуры искомых компонентов. В докладе рассматривается базовая структура правила для Approof и процесс автоматизации его создания.
Мастер-класс «Трущобы Application Security»Positive Hack DaysЗадумывались ли вы когда-нибудь о том, как устроены современные механизмы защиты приложений? Какая теория стоит за реализацией WAF и SAST? Каковы пределы их возможностей? Насколько их можно подвинуть за счет более широкого взгляда на проблематику безопасности приложений?
На мастер-классе будут рассмотрены основные методы и алгоритмы двух основополагающих технологий защиты приложений — межсетевого экранирования уровня приложения и статического анализа кода. На примерах конкретных инструментов с открытым исходным кодом, разработанных специально для этого мастер-класса, будут рассмотрены проблемы, возникающие на пути у разработчиков средств защиты приложений, и возможные пути их решения, а также даны ответы на все упомянутые вопросы.
От экспериментального программирования к промышленному: путь длиной в 10 летPositive Hack DaysРазработка наукоемкого программного обеспечения отличается тем, что нет ни четкой постановки задачи, ни понимания, что получится в результате. Однако даже этом надо программировать то, что надо, и как надо. Докладчик расскажет о том, как ее команда успешно разработала и вывела в промышленную эксплуатацию несколько наукоемких продуктов, пройдя непростой путь от эксперимента, результатом которого был прототип, до промышленных версий, которые успешно продаются как на российском, так и на зарубежном рынках. Этот путь был насыщен сложностями и качественными управленческими решениями, которыми поделится докладчик
Уязвимое Android-приложение: N проверенных способов наступить на граблиPositive Hack DaysНемногие разработчики закладывают безопасность в архитектуру приложения на этапе проектирования. Часто для этого нет ни денег, ни времени. Еще меньше — понимания моделей нарушителя и моделей угроз. Защита приложения выходит на передний план, когда уязвимости начинают стоить денег. К этому времени приложение уже работает и внесение существенных изменений в код становится нелегкой задачей.
К счастью, разработчики тоже люди, и в коде разных приложений можно встретить однотипные недостатки. В докладе речь пойдет об опасных ошибках, которые чаще всего допускают разработчики Android-приложений. Затрагиваются особенности ОС Android, приводятся примеры реальных приложений и уязвимостей в них, описываются способы устранения.
Требования по безопасности в архитектуре ПОPositive Hack DaysРазработка любого софта так или иначе базируется на требованиях. Полный перечень составляют бизнес-цели приложения, различные ограничения и ожидания по качеству (их еще называют NFR). Требования к безопасности ПО относятся к последнему пункту. В ходе доклада будут рассматриваться появление этих требований, управление ими и выбор наиболее важных.
Отдельно будут освещены принципы построения архитектуры приложения, при наличии таких требований и без, и продемонстрировано, как современные (и хорошо известные) подходы к проектированию приложения помогают лучше строить архитектуру приложения для минимизации ландшафта угроз.
Формальная верификация кода на языке СиPositive Hack DaysДоклад посвящен разработке корректного программного обеспечения с применением одного из видов статического анализа кода. Будут освещены вопросы применения подобных методов, их слабые стороны и ограничения, а также рассмотрены результаты, которые они могут дать. На конкретных примерах будет продемонстрировано, как выглядят разработка спецификаций для кода на языке Си и доказательство соответствия кода спецификациям.
Механизмы предотвращения атак в ASP.NET CorePositive Hack DaysThe document discusses preventing attacks in ASP.NET Core. It provides an overview of topics like preventing open redirect attacks, cross-site request forgery (CSRF), cross-site scripting (XSS) attacks, using and architecture of cookies, data protection, session management, and content security policy (CSP). The speaker is an independent developer and consultant who will discuss built-in mechanisms in ASP.NET Core for addressing these security issues.
Решение SafeTouch — доверенный экран для безопасного подтверждения банковских...Positive Hack DaysВ рамках секции: Инновации в средствах защиты и проверки защищенности
DDoS-атаки в 2016–2017: переворотPositive Hack DaysК началу 2016 года у многих сложилось впечатление, что проблема DDoS-атак исчерпала себя — настолько тривиальными выглядели сами атаки и меры по защите от них. Спустя год ситуация кардинально изменилась. Обсудим эти изменения, их причины, предпосылки и последствия, а также их взаимосвязь с развитием IoT.
Эволюция безопасности: от охранников к нейронным сетямPositive Hack DaysSecurity has evolved from human guards to advanced neural networks. Dmitriy Manannikov wrote an article in 2017 titled "SECURITY EVOLUTION from guards to neural networks" discussing the evolution of security methods from human guards to modern neural network technologies.
Эволюция безопасности: от охранников к нейронным сетямPositive Hack Days
Типовая сборка и деплой продуктов в Positive Technologies
1. Типовая сборка и деплой продуктов
в Positive Technologies
Александров Владислав
CI-инженер
valexandrov@ptsecurity.com
2. План
• Проблемы в построении CI-процессов в компании
• Структура типовой сборки
• Пример реализации типовой сборки
• Плюсы и минусы от использования типовой сборки
7. Проблемы
• Нет типового шаблона для создания сборочных, деплойных
и тестовых конфигураций
• Медленное создание типовых проектов в Continuous
Integration системах
• Отсутствие механизмов масштабируемости проектов
8. Решения
• Создать структуру будущих сборок, позволяющую
быстро расширять и изменять их
• Создать базовые шаблоны и метараннеры в TeamCity
• Создать автоматический генератор для TeamCity
сборок в DevOps tools
18. Основные root meta-runners
• Deploy DevOps-tools — доставляет на сборочные агенты
DevOps скрипты
• Build prepare — подготавливает окружение перед запуском
сборочных метараннеров
• Linux build — запускает сборку с определенным
компилятором под nix системы
• Windows build — запускает сборку с определенным
компилятором под win системы
19. Build prepare: основные шаги
• Определение версии (major, minor, patch)
• Подготовка переменных для сборочных метараннеров
• Обновление информации о сборке в UI TeamCity
• Обновление build-счетчика
• Создание файлов с чувствительной информацией
• Перемещение исходников в рабочую директорию
20. Windows/Linux build: основные шаги
• Подготовка переменных окружения
• Запуск сборочного скрипта (build-on-server)
• Создание архива для выкладки
• Выкладка финального архива и/или дополнительных
компонентов
23. TeamCity агенты
Windows
• Администрирование
командой DevOps
• Изменение окружения только
командой DevOps
• Выделенные пулы для
команд
Linux
• Администрирование командой
DevOps
• Запуск сборок в Docker
контейнерах
• Docker контейнеры
поддерживаются
разработчиками
• Единый Linux пул
25. Плюсы
• Типизированный процесс сборок
• Узловые метараннеры и шаблоны
• Структура всех компонент в коде
• Новый проект? Легко!
26. Минусы
• Ограниченная гибкость изменений конфигураций
• Сборочные шаги контролируются только DevOps
• Изменения окружения практически не обратимы
• Одна сборочная конфигурация для всех веток подпроекта
28. Дальше — больше
• Передать управление шагами сборки в команды
• Версионирование Docker образов
• Создать единый Windows пул
• Автоматизация и еще раз автоматизация