63
Управление сборками и развертыванием веб- приложений Шмаркатюк Сергей, Senior Software Engineer (EPAM Systems) 17 мая 2010 года

управление сборками и развертыванием веб приложений

Embed Size (px)

DESCRIPTION

Слайды доклада на DEVCONF::Ruby 2010

Citation preview

Page 1: управление сборками и развертыванием веб приложений

Управление сборками и развертыванием веб-

приложений Шмаркатюк Сергей, Senior Software Engineer (EPAM Systems)

17 мая 2010 года

Page 2: управление сборками и развертыванием веб приложений

Проекты растут в размерах

project

Page 3: управление сборками и развертыванием веб приложений

… а значит становятся более громоздкими

Page 4: управление сборками и развертыванием веб приложений

Рутина затягивает. Нужно больше времени, ресурсов, денег…

Page 5: управление сборками и развертыванием веб приложений

Чтобы делать всё вручную!

Page 6: управление сборками и развертыванием веб приложений

В том числе сборки!

Page 7: управление сборками и развертыванием веб приложений

Значение автоматических сборок оказывается недооцененным…

Page 8: управление сборками и развертыванием веб приложений

… и как результат: проект выходит из-под контроля

Page 9: управление сборками и развертыванием веб приложений

Что делать?

Page 10: управление сборками и развертыванием веб приложений

Нужно знать!

1. Что такое сборка.2. Зачем вообще нужны сборки.

3. Типы сборок и их структура.

4. Чем отличается сборка от развертывания (deployment).

5. Какие есть типы целевых платформ.6. Как эффективно использовать нужные

инструменты.

Page 11: управление сборками и развертыванием веб приложений

И это не всё

7. Почему нужны развертывания?

8. Когда выполнять развертывание и как?9. Какие существуют самые сложные случаи

сборок?

10.Как собрать веб-приложение и зачем это нужно делать?

11.И в конце зарубить на носу ряд правил касающихся сборок

Page 12: управление сборками и развертыванием веб приложений

Из ВПроцесс преобразования

Исходного кода АртефактыИсполняемые на рабочей

станции конечного пользователя

Сборка – это…

Page 13: управление сборками и развертыванием веб приложений

Конфигурации

СборкаЭТО РЕЗУЛЬТАТ

Определенный набор компонентов конкретных версийКомпоненты = функциональные модулиКомпоненты и их версии выбираются для удовлетворения

конкретных целей и задач

Основные цели

Функциональность Производительность

Зачем нужно делать сборки?

Page 14: управление сборками и развертыванием веб приложений

Вывод. Сборки нужны для:• Поддержки дополнительной функциональности (фичи)• Достижения определенного уровня производительности

А как насчет данных?• Данные живут сами по себе• Для их комфортного существования придумана

интеграция баз данных (и миграции в частности)

Зачем нужно делать сборки?

Page 15: управление сборками и развертыванием веб приложений

Самые сложные сборки это…

• Версия• Тип сборки: debug или release• Операционная система, аппаратная платформа (x32,

x64, …)• Локализация (en, ru, ua, …)• Платформа (development, test, integration, production)• Зрелость (alpha, beta, release candidate, stable)

• …

Сборки имеющие все нижеперечисленные параметры:

Page 16: управление сборками и развертыванием веб приложений

Что такое вариант приложения?

Вариант – это результат сборки, характеризуемый набором специфических

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

Page 17: управление сборками и развертыванием веб приложений

17

AppName-1.1.8.en.x32_beta.msi

install.msiСборка:

Вариант:

HTC_Touch_Diamond2_WM6.5_RUU_Topaz_S_HTC_RUS_2.16.411.2_Radio_Sign_Topaz_61.44tc.25.32_4.49.25.17_Ship.exe

Пример из жизни:

Сборки и варианты приложений

Page 18: управление сборками и развертыванием веб приложений

Как управлять процессом сборки?Определите какие задачи сборки вам нужны

Определите сборки каких типов вам нужны

Выберите фазы сборок, которые могут понадобиться

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

Структурируйте файл сборок

Page 19: управление сборками и развертыванием веб приложений

Определите какие задачи сборки вам нужны

Определите сборки каких типов вам нужны

Выберите фазы сборок, которые могут понадобиться

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

Структурируйте файл сборок

Page 20: управление сборками и развертыванием веб приложений

• Компиляция• Развертывание• Интеграция БД• Юнит-тестирование• Покрытие кода тестами• Статический анализ• Метрики исходного кода• Динамический анализ• Генерация документации• …

Задачисборки

Page 21: управление сборками и развертыванием веб приложений

Главный принцип – приоритизация задач

Page 22: управление сборками и развертыванием веб приложений

Есть тонкий момент…

Page 23: управление сборками и развертыванием веб приложений

В чем разница между…

СборкойРазвертывание

ми

?

Page 24: управление сборками и развертыванием веб приложений

Развертывание – это процесс установки ПО

Page 25: управление сборками и развертыванием веб приложений

Тогда как…

сборка – это процесс создания артефактов для последующей инсталляции

Page 26: управление сборками и развертыванием веб приложений

Но!

Для веб-приложений сборка и развертывание – суть одно и то же

=

Page 27: управление сборками и развертыванием веб приложений

Если точнее, то…

Утверждение «сборка = развертывание» – справедливо для веб-приложений, использующих интерпретируемые языки программирования

Page 28: управление сборками и развертыванием веб приложений

Может возникать путаница

Считается, что веб-приложения нужно развертывать

Page 29: управление сборками и развертыванием веб приложений

Но мы все равно будем говорить о сборках…

…так как развертывание – это составная часть сборок

Page 30: управление сборками и развертыванием веб приложений

Определите какие задачи сборки вам нужны

Определите сборки каких типов вам нужны

Выберите фазы сборок, которые могут понадобиться

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

Структурируйте файл сборок

Page 31: управление сборками и развертыванием веб приложений

Классификация сборок по целевому назначению

Local

Private

Integration

Test Release

Page 32: управление сборками и развертыванием веб приложений

Целевые платформы (Rails)

dev

test

prod

Page 33: управление сборками и развертыванием веб приложений

Определите какие задачи сборки вам нужны

Определите сборки каких типов вам нужны

Выберите фазы сборок, которые могут понадобиться

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

Структурируйте файл сборок

Page 34: управление сборками и развертыванием веб приложений

• Build– Развертывание– Юнит-

тестирование– Инспекции

Pre-buildОчисткаИнициализацияПроверка свободного места

Post-buildГенерация документацииПроверка ошибок сборкиСекьюрити-тестыТегирование

Фазы сборок

Page 35: управление сборками и развертыванием веб приложений

Определение фаз сборок необходимо с целью создания staged-сборки

staged-сборка позволяет приложению быть доступным для использования

как можно раньше

Это и ежу понятно!

Page 36: управление сборками и развертыванием веб приложений

Определите какие задачи сборки вам нужны

Определите сборки каких типов вам нужны

Выберите фазы сборок, которые могут понадобиться

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

Структурируйте файл сборок

Page 37: управление сборками и развертыванием веб приложений

Конечно же rake + capistrano!

+

и еще…

Page 38: управление сборками и развертыванием веб приложений

Определите какие задачи сборки вам нужны

Определите сборки каких типов вам нужны

Выберите фазы сборок, которые могут понадобиться

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

Структурируйте файл сборок

Page 39: управление сборками и развертыванием веб приложений

И тут пошла жесть!

Page 40: управление сборками и развертыванием веб приложений

• Компиляция• Развертывание• Интеграция БД• Юнит-тестирование• Анализ покрытия кода• Статический анализ• Метрики исходного кода• Динамический анализ• Генерация документации• …

task :compile

task :deploy

task :db:migrate

task :test:unit

task :coverage:check task :inspections:run task :metrics:gather task :test:benchmark task :doc:generate …

Задачи сборки rake задачи

Page 41: управление сборками и развертыванием веб приложений

Основная идея1. Зависимости между rake-задачами организуются исходя из набора необходимых типов сборки:

(local, private, test, integration, release)

2. Для построения зависимостей используется приоритизированный список задач сборки:

(компиляция, развертывание, интеграция бд, …)

3. Задачам сборки соответствует одна или более rake-задач: (:compile, :deploy:, db:migrate)

Page 42: управление сборками и развертыванием веб приложений

Local-сборка – это…

…то, что мы должны сделать после ковыряния в развернутом dev-приложении

Page 43: управление сборками и развертыванием веб приложений

Local-сборка

Компиляция

РазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеПростой статический анализ

Page 44: управление сборками и развертыванием веб приложений

Private-сборка – это…

…полная пересборка локального dev-приложения

Page 45: управление сборками и развертыванием веб приложений

Компиляция

РазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеПростой статический анализ

Private-сборка (development)

Page 46: управление сборками и развертыванием веб приложений

Integration-сборка – это…

… сборка, которую запускает continuous integration сервер

Page 47: управление сборками и развертыванием веб приложений

КомпиляцияРазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеСтатический анализДинамический анализГенерация документацииСбор метрик

Integration-сборка

Page 48: управление сборками и развертыванием веб приложений

Release-сборка – это…

… то, что поступает на тестирование или в продакшн

Page 49: управление сборками и развертыванием веб приложений

КомпиляцияРазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеСекьюрити тестыПроверка целостностиТесты на производительность

Release-сборка

Page 50: управление сборками и развертыванием веб приложений

Резюмируя изложенноеnamespace 'build' do

task :local => ['compile', 'test:unit'] do # ... end

task :private => ['compile', 'deploy:private', 'db:migrate', 'db:fixtures', 'test:unit', ‘inspections:run'] do # ... end

task :integration => ['compile', 'deploy:integration', 'db:migrate', 'db:fixtures', 'test:unit', 'inspections:run', 'dynamic_analysis', 'doc:generate', 'metrics:gather'] do # ... end

task :release => ['compile', 'deploy:release', 'db:migrate', 'db:fixtures', 'test:unit', 'test:security', 'test:integrity', 'test:performance'] do # ... endend

Page 51: управление сборками и развертыванием веб приложений

Классификация развертываний

Статическое – когда запускается контейнер приложений

На лету – возможность развертывать приложение во время работы контейнера приложений. Без перезапуска

Page 52: управление сборками и развертыванием веб приложений

Классификация развертываний

• Удаленные– Требуют соединения

• Локальные– Не требуют соединения

Page 53: управление сборками и развертыванием веб приложений

Инкрементальное развертывание• Rsync

– Синхронизирует файлы и директории для двух разных мест

• SVN export – только измененные файлы– svn diff –summarize /path1 /path2

• Развертывание добавленных/измененных с момента последней ревизии файлов– svn status

В большинстве случаев это - …

Головная боль!

Page 54: управление сборками и развертыванием веб приложений

Задачи развертывания

• Развертывание– Собственно развертывание– Запуск/перезапуск/остановка веб-сервера

• Интеграция БД– Генерация моделей– Дамп данных– Миграции– Фикстуры– …

Page 55: управление сборками и развертыванием веб приложений

Типичные случаи развертывания

1. Локальное приложение

2. Несколько локальных приложений

3. Удаленные приложения, соответствующие локальным

4. Высоконагруженное приложение

Page 57: управление сборками и развертыванием веб приложений

WC (working copy, trunk)

dev db

dev instance

test db

test instance

prod db

prod instance

локальное развертывание

№2

Page 58: управление сборками и развертыванием веб приложений

WC (working copy, trunk)локальное развертывание

dev

+

test

+

prod

+

prod

+

test

+

dev

+

удаленное развертывание

№3

Page 59: управление сборками и развертыванием веб приложений

Высоконагруженные приложения – тема отдельного доклада

№4

Page 60: управление сборками и развертыванием веб приложений

Пример в студию!

Page 61: управление сборками и развертыванием веб приложений

WC (working copy)Развернутое приложение Репозиторий

svn up

ant build-private

Второе развернутое приложение

changeset (#146)

manual merge

r1049

r1050

r1051

r1052

r1126svn up

ant build-private –Dinstance=2 resolve conflicts

development

OK?no

yessvn commit

manual mergemake correctionssvn commit

Page 62: управление сборками и развертыванием веб приложений

Основные правила билд-менеджмента

• Сборки должны быть отделены от IDE• Выполняйте быстрые тесты первыми

– Руководствуйтесь подходом staged-сборок • Чем раньше упадет билд, тем лучше

– Приоритизируйте задачи сборки• Собирайте компоненты отдельно

– Рекурсивная сборка• Централизуйте доступ к ресурсам проекта

– Исходники к исходникам (контроль версий)– Бинарники к бинарнкам (выделенные репозитории)

• Продуманная структура директорий проекта– Разработайте соглашения если еще нет таковых

Page 63: управление сборками и развертыванием веб приложений

Спасибо за внимание