24
Инструментарий для создания дистрибутива продукта Владимир Селин отдел разработки инфраструктуры старший программист [email protected] https://www.linkedin.com/in/vselin

Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Embed Size (px)

Citation preview

Page 1: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Инструментарий для создания дистрибутива продукта

Владимир Селинотдел разработки инфраструктуры

старший программист[email protected]

https://www.linkedin.com/in/vselin

Page 2: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Проблема:Поддержка и сопровождение инсталляторабольшого продукта

Page 3: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Немного истории

Начало (осень 2013):• 1 компонент продукта• 1 проект инсталлятора• 6 сервисов и конфигурационных файлов• 4 артефакта-источника файлов для дистрибутива• 1 человек из команды компонента

Развитие (2014-2015):• 4 компонента продукта• 18 проектов инсталлятора• 20+ сервисов и конфигурационных файлов• 50+ артефактов• ~10 Feature Branches (FB)• 4 человека в [новом] отделе инфраструктуры продукта

Page 4: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Тенденции

Рост сложности проекта:• Увеличивается количество компонентов продукта• Увеличивается сложность каждого компонента: больше сервисов, конфигурационных файлов, настраиваемых параметров

• Растет команда продукта: больше FB в одновременной разработке

Рост трудозатрат команды инфраструктуры (КИ):

• Растет среднее время ожидания внесения изменений• Изменения высокоприоритетны и вытесняют задачи развития инфраструктурных проектов

Page 5: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Эффекты проблемы

• Временные издержки при формулировке изменений заказчиком

• Издержки при разборе проблем с развертыванием

• Потери на переключение контекста

• Разработчики лишены возможности быстрого получения экспериментального или FB-инсталлятора

• Усложняется и замедляется цикл разработки и поддержки инсталлятора и продукта в целом

Page 6: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Решение: Разделение зон ответственности

Page 7: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Анализ

• Изменения состава инсталлятора компонента:• Какие файлы из каких артефактов должны попасть в инсталлятор?

• Изменения требуемого состояния целевой операционной системы:• Какие сервисы, сайты, правила файрвола, задачи в планировщике создать?

• Какие директории и с какими правами нужно создать?

• Изменения настройки компонента:• Какие параметры должны настраиваться?

• В какие конфигурационные файлы и как должны прописываться параметры?

Page 8: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Цель: разделить знания и права на внесение изменений

Командаинфраструктуры

Состав

Настройки продукта

Настройки системы

Алгоритмы и последовательности

настройки

Инструменты сборки

Инструменты развертывания

Было Стало

Командаразработки

Описания

Параметров настройки

Состояния ОС

Состава инсталлятораШаблоны конфигурационных файлов

Команда инфраструктуры

Шаблоны сценариев развертывания

Инструменты

Сборки инсталлятора

Развертывания и настройки

Page 9: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

DSL как решение проблем

Page 10: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

DSL для описания инсталлятора

Зачем?

• Быстро и понятно

DSL (Domain-specific language) – язык, специализированный для своей области применения

• Расширяемость и гибкость без потери контроля

Page 11: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Технологии

• Python (Jinja2, PyYaml, jsonschema): генерация сценариев и

конфигурационных файлов, валидация DSL-описаний и

генерация документации по схеме

• PowerShell: сценарии развертывания для Windows

• C#: самописная библиотека функций для настройки Windows-

окружения

• WiX, MSI: создание инсталляционных пакетов для Windows

Page 12: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Генерация сценария

DSL Шаблон сценария Сценарий

Page 13: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Генерация сценария: DSL (YAML)

...

services:

- Name: ScannerManagement.Host

DisplayName: Scan Management Host

Description: Scan Management Host

BinaryPath: '{{params.InstallDir}}\ScanManagement.Host.exe'

Dependencies: [MongoDB, RabbitMQ]

AccountName: NT AUTHORITY\NETWORK SERVICE

...

Page 14: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Генерация сценария: Шаблон сценария развертывания (Jinja2)

...

{% for service in services %}

$serviceAccount = New-Object

System.Management.Automation.PSCredential("{{service.AccountName}}“)

Install-Service `

-Name "{{service.Name}}" `

-DisplayName "{{service.DisplayName}}" `

-Description "{{service.Description}}" `

-BinaryPathName "{{service.BinaryPath}}" `

{% if service.Dependencies %}-DependsOn{%- for item in service.Dependencies %}

'{{item}}'{% if not loop.last %},{% endif %} {%- endfor %} `{% endif %}

-Credential $serviceAccount

{% endfor %}

...

Page 15: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Генерация сценария: сценарий развертывания (PowerShell)

...$serviceAccount = New-Object System.Management.Automation.PSCredential("NT AUTHORITY\NETWORK SERVICE")Install-Service -Name "ScannerManagement.Host" ` -DisplayName "Scan Management Host" ` -Description "Scan Management Host" ` -BinaryPathName "$($params.InstallDir)\ScanManagement.Host.exe" ` -DependsOn 'MongoDB', 'RabbitMQ' -Credential $serviceAccount...

Page 16: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Генерация конфигурационных файлов

Значения параметров

Шаблон конф. файла

Конф. файл

Page 17: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Генерация документации

Схема DSL HTML-шаблон документации

Документация в HTML

Page 18: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Результаты:Эффекты от внедрения

Page 19: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Знания и ответственность распределились по компетенциям

Разработчики Инфраструктура

Приведение ОС к требуемому состоянию

Установка и настройка пререквизитов

Инструменты для создания

инсталл. пакета

Инструменты настройки компонента

Описание состояния ОС

Описание параметров компонента

Описание состава пакета

Шаблоны конфигурационных

файлов

Page 20: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Заказчик изменений и исполнитель объединились

• У разработчиков появились знания об процессе развертывания• Описания инсталлятора и шаблоны конфигураций находятся в проектах разработчиков

Было: Стало:

Page 21: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Устранили узкое место, увеличили производительность

Было:

Заказчики изменений(разработчики)

Исполнитель(инфраструктура)

Продукт(инсталлятор)

Page 22: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Устранили узкое место, увеличили производительность

Стало:

Заказчики и исполнители изменений

(разработчики)

Продукт(инсталлятор)

[Среднее время ожиданиявнесенияизменений ]=𝐶𝑜𝑛𝑠𝑡

Page 23: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Планы развития

• Linux как еще одна целевая платформа:

• Расширение DSL для описания Linux-specific сущностей ОС

• Сборка .deb на основе описания состава пакета

• Интеграция с Salt:

• Скрипты развертывания → Salt States

• Публикация инструментов на GitHub в сообщество DevOpsHQ

Page 24: Инструментарий для создания дистрибутивов продуктов | Владимир Селин

Спасибо!Вопросы?

Владимир СелинОтдел разработки инфраструктуры

Старший программист[email protected]

https://www.linkedin.com/in/vselin