Upload
sergii-shmarkatiuk
View
1.775
Download
0
Embed Size (px)
DESCRIPTION
Слайды доклада на DEVCONF::Ruby 2010
Citation preview
Управление сборками и развертыванием веб-
приложений Шмаркатюк Сергей, Senior Software Engineer (EPAM Systems)
17 мая 2010 года
Проекты растут в размерах
project
… а значит становятся более громоздкими
Рутина затягивает. Нужно больше времени, ресурсов, денег…
Чтобы делать всё вручную!
В том числе сборки!
Значение автоматических сборок оказывается недооцененным…
… и как результат: проект выходит из-под контроля
Что делать?
Нужно знать!
1. Что такое сборка.2. Зачем вообще нужны сборки.
3. Типы сборок и их структура.
4. Чем отличается сборка от развертывания (deployment).
5. Какие есть типы целевых платформ.6. Как эффективно использовать нужные
инструменты.
И это не всё
7. Почему нужны развертывания?
8. Когда выполнять развертывание и как?9. Какие существуют самые сложные случаи
сборок?
10.Как собрать веб-приложение и зачем это нужно делать?
11.И в конце зарубить на носу ряд правил касающихся сборок
Из ВПроцесс преобразования
Исходного кода АртефактыИсполняемые на рабочей
станции конечного пользователя
Сборка – это…
Конфигурации
СборкаЭТО РЕЗУЛЬТАТ
Определенный набор компонентов конкретных версийКомпоненты = функциональные модулиКомпоненты и их версии выбираются для удовлетворения
конкретных целей и задач
Основные цели
Функциональность Производительность
Зачем нужно делать сборки?
Вывод. Сборки нужны для:• Поддержки дополнительной функциональности (фичи)• Достижения определенного уровня производительности
А как насчет данных?• Данные живут сами по себе• Для их комфортного существования придумана
интеграция баз данных (и миграции в частности)
Зачем нужно делать сборки?
Самые сложные сборки это…
• Версия• Тип сборки: debug или release• Операционная система, аппаратная платформа (x32,
x64, …)• Локализация (en, ru, ua, …)• Платформа (development, test, integration, production)• Зрелость (alpha, beta, release candidate, stable)
• …
Сборки имеющие все нижеперечисленные параметры:
Что такое вариант приложения?
Вариант – это результат сборки, характеризуемый набором специфических
параметров и их значениями
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
Пример из жизни:
Сборки и варианты приложений
Как управлять процессом сборки?Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
• Компиляция• Развертывание• Интеграция БД• Юнит-тестирование• Покрытие кода тестами• Статический анализ• Метрики исходного кода• Динамический анализ• Генерация документации• …
Задачисборки
Главный принцип – приоритизация задач
Есть тонкий момент…
В чем разница между…
СборкойРазвертывание
ми
?
Развертывание – это процесс установки ПО
Тогда как…
сборка – это процесс создания артефактов для последующей инсталляции
Но!
Для веб-приложений сборка и развертывание – суть одно и то же
=
Если точнее, то…
Утверждение «сборка = развертывание» – справедливо для веб-приложений, использующих интерпретируемые языки программирования
Может возникать путаница
Считается, что веб-приложения нужно развертывать
Но мы все равно будем говорить о сборках…
…так как развертывание – это составная часть сборок
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
Классификация сборок по целевому назначению
Local
Private
Integration
Test Release
Целевые платформы (Rails)
dev
test
prod
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
• Build– Развертывание– Юнит-
тестирование– Инспекции
Pre-buildОчисткаИнициализацияПроверка свободного места
Post-buildГенерация документацииПроверка ошибок сборкиСекьюрити-тестыТегирование
Фазы сборок
Определение фаз сборок необходимо с целью создания staged-сборки
staged-сборка позволяет приложению быть доступным для использования
как можно раньше
Это и ежу понятно!
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
Конечно же rake + capistrano!
+
и еще…
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
И тут пошла жесть!
• Компиляция• Развертывание• Интеграция БД• Юнит-тестирование• Анализ покрытия кода• Статический анализ• Метрики исходного кода• Динамический анализ• Генерация документации• …
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 задачи
Основная идея1. Зависимости между rake-задачами организуются исходя из набора необходимых типов сборки:
(local, private, test, integration, release)
2. Для построения зависимостей используется приоритизированный список задач сборки:
(компиляция, развертывание, интеграция бд, …)
3. Задачам сборки соответствует одна или более rake-задач: (:compile, :deploy:, db:migrate)
Local-сборка – это…
…то, что мы должны сделать после ковыряния в развернутом dev-приложении
Local-сборка
Компиляция
РазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеПростой статический анализ
Private-сборка – это…
…полная пересборка локального dev-приложения
Компиляция
РазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеПростой статический анализ
Private-сборка (development)
Integration-сборка – это…
… сборка, которую запускает continuous integration сервер
КомпиляцияРазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеСтатический анализДинамический анализГенерация документацииСбор метрик
Integration-сборка
Release-сборка – это…
… то, что поступает на тестирование или в продакшн
КомпиляцияРазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеСекьюрити тестыПроверка целостностиТесты на производительность
Release-сборка
Резюмируя изложенное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
Классификация развертываний
Статическое – когда запускается контейнер приложений
На лету – возможность развертывать приложение во время работы контейнера приложений. Без перезапуска
Классификация развертываний
• Удаленные– Требуют соединения
• Локальные– Не требуют соединения
Инкрементальное развертывание• Rsync
– Синхронизирует файлы и директории для двух разных мест
• SVN export – только измененные файлы– svn diff –summarize /path1 /path2
• Развертывание добавленных/измененных с момента последней ревизии файлов– svn status
В большинстве случаев это - …
Головная боль!
Задачи развертывания
• Развертывание– Собственно развертывание– Запуск/перезапуск/остановка веб-сервера
• Интеграция БД– Генерация моделей– Дамп данных– Миграции– Фикстуры– …
Типичные случаи развертывания
1. Локальное приложение
2. Несколько локальных приложений
3. Удаленные приложения, соответствующие локальным
4. Высоконагруженное приложение
WC (working copy, trunk)
dbinstance
локальноеразвертывание
№1
WC (working copy, trunk)
dev db
dev instance
test db
test instance
prod db
prod instance
локальное развертывание
№2
WC (working copy, trunk)локальное развертывание
dev
+
test
+
prod
+
prod
+
test
+
dev
+
удаленное развертывание
№3
Высоконагруженные приложения – тема отдельного доклада
№4
Пример в студию!
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
Основные правила билд-менеджмента
• Сборки должны быть отделены от IDE• Выполняйте быстрые тесты первыми
– Руководствуйтесь подходом staged-сборок • Чем раньше упадет билд, тем лучше
– Приоритизируйте задачи сборки• Собирайте компоненты отдельно
– Рекурсивная сборка• Централизуйте доступ к ресурсам проекта
– Исходники к исходникам (контроль версий)– Бинарники к бинарнкам (выделенные репозитории)
• Продуманная структура директорий проекта– Разработайте соглашения если еще нет таковых
Спасибо за внимание