Тренинг «Разработка веб-приложений с использованием ASP.NET MVC Framework»
управление сборками и развертыванием веб приложений
-
Upload
sergii-shmarkatiuk -
Category
Technology
-
view
1.776 -
download
0
description
Transcript of управление сборками и развертыванием веб приложений
![Page 1: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/1.jpg)
Управление сборками и развертыванием веб-
приложений Шмаркатюк Сергей, Senior Software Engineer (EPAM Systems)
17 мая 2010 года
![Page 2: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/2.jpg)
Проекты растут в размерах
project
![Page 3: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/3.jpg)
… а значит становятся более громоздкими
![Page 4: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/4.jpg)
Рутина затягивает. Нужно больше времени, ресурсов, денег…
![Page 5: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/5.jpg)
Чтобы делать всё вручную!
![Page 6: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/6.jpg)
В том числе сборки!
![Page 7: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/7.jpg)
Значение автоматических сборок оказывается недооцененным…
![Page 8: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/8.jpg)
… и как результат: проект выходит из-под контроля
![Page 9: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/9.jpg)
Что делать?
![Page 10: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/10.jpg)
Нужно знать!
1. Что такое сборка.2. Зачем вообще нужны сборки.
3. Типы сборок и их структура.
4. Чем отличается сборка от развертывания (deployment).
5. Какие есть типы целевых платформ.6. Как эффективно использовать нужные
инструменты.
![Page 11: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/11.jpg)
И это не всё
7. Почему нужны развертывания?
8. Когда выполнять развертывание и как?9. Какие существуют самые сложные случаи
сборок?
10.Как собрать веб-приложение и зачем это нужно делать?
11.И в конце зарубить на носу ряд правил касающихся сборок
![Page 12: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/12.jpg)
Из ВПроцесс преобразования
Исходного кода АртефактыИсполняемые на рабочей
станции конечного пользователя
Сборка – это…
![Page 13: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/13.jpg)
Конфигурации
СборкаЭТО РЕЗУЛЬТАТ
Определенный набор компонентов конкретных версийКомпоненты = функциональные модулиКомпоненты и их версии выбираются для удовлетворения
конкретных целей и задач
Основные цели
Функциональность Производительность
Зачем нужно делать сборки?
![Page 14: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/14.jpg)
Вывод. Сборки нужны для:• Поддержки дополнительной функциональности (фичи)• Достижения определенного уровня производительности
А как насчет данных?• Данные живут сами по себе• Для их комфортного существования придумана
интеграция баз данных (и миграции в частности)
Зачем нужно делать сборки?
![Page 15: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/15.jpg)
Самые сложные сборки это…
• Версия• Тип сборки: debug или release• Операционная система, аппаратная платформа (x32,
x64, …)• Локализация (en, ru, ua, …)• Платформа (development, test, integration, production)• Зрелость (alpha, beta, release candidate, stable)
• …
Сборки имеющие все нижеперечисленные параметры:
![Page 16: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/16.jpg)
Что такое вариант приложения?
Вариант – это результат сборки, характеризуемый набором специфических
параметров и их значениями
![Page 17: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/17.jpg)
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: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/18.jpg)
Как управлять процессом сборки?Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
![Page 19: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/19.jpg)
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
![Page 20: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/20.jpg)
• Компиляция• Развертывание• Интеграция БД• Юнит-тестирование• Покрытие кода тестами• Статический анализ• Метрики исходного кода• Динамический анализ• Генерация документации• …
Задачисборки
![Page 21: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/21.jpg)
Главный принцип – приоритизация задач
![Page 22: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/22.jpg)
Есть тонкий момент…
![Page 23: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/23.jpg)
В чем разница между…
СборкойРазвертывание
ми
?
![Page 24: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/24.jpg)
Развертывание – это процесс установки ПО
![Page 25: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/25.jpg)
Тогда как…
сборка – это процесс создания артефактов для последующей инсталляции
![Page 26: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/26.jpg)
Но!
Для веб-приложений сборка и развертывание – суть одно и то же
=
![Page 27: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/27.jpg)
Если точнее, то…
Утверждение «сборка = развертывание» – справедливо для веб-приложений, использующих интерпретируемые языки программирования
![Page 28: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/28.jpg)
Может возникать путаница
Считается, что веб-приложения нужно развертывать
![Page 29: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/29.jpg)
Но мы все равно будем говорить о сборках…
…так как развертывание – это составная часть сборок
![Page 30: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/30.jpg)
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
![Page 31: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/31.jpg)
Классификация сборок по целевому назначению
Local
Private
Integration
Test Release
![Page 32: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/32.jpg)
Целевые платформы (Rails)
dev
test
prod
![Page 33: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/33.jpg)
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
![Page 34: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/34.jpg)
• Build– Развертывание– Юнит-
тестирование– Инспекции
Pre-buildОчисткаИнициализацияПроверка свободного места
Post-buildГенерация документацииПроверка ошибок сборкиСекьюрити-тестыТегирование
Фазы сборок
![Page 35: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/35.jpg)
Определение фаз сборок необходимо с целью создания staged-сборки
staged-сборка позволяет приложению быть доступным для использования
как можно раньше
Это и ежу понятно!
![Page 36: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/36.jpg)
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
![Page 37: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/37.jpg)
Конечно же rake + capistrano!
+
и еще…
![Page 38: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/38.jpg)
Определите какие задачи сборки вам нужны
Определите сборки каких типов вам нужны
Выберите фазы сборок, которые могут понадобиться
Выберите инструмент сборок
Структурируйте файл сборок
![Page 39: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/39.jpg)
И тут пошла жесть!
![Page 40: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/40.jpg)
• Компиляция• Развертывание• Интеграция БД• Юнит-тестирование• Анализ покрытия кода• Статический анализ• Метрики исходного кода• Динамический анализ• Генерация документации• …
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: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/41.jpg)
Основная идея1. Зависимости между rake-задачами организуются исходя из набора необходимых типов сборки:
(local, private, test, integration, release)
2. Для построения зависимостей используется приоритизированный список задач сборки:
(компиляция, развертывание, интеграция бд, …)
3. Задачам сборки соответствует одна или более rake-задач: (:compile, :deploy:, db:migrate)
![Page 42: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/42.jpg)
Local-сборка – это…
…то, что мы должны сделать после ковыряния в развернутом dev-приложении
![Page 43: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/43.jpg)
Local-сборка
Компиляция
РазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеПростой статический анализ
![Page 44: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/44.jpg)
Private-сборка – это…
…полная пересборка локального dev-приложения
![Page 45: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/45.jpg)
Компиляция
РазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеПростой статический анализ
Private-сборка (development)
![Page 46: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/46.jpg)
Integration-сборка – это…
… сборка, которую запускает continuous integration сервер
![Page 47: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/47.jpg)
КомпиляцияРазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеСтатический анализДинамический анализГенерация документацииСбор метрик
Integration-сборка
![Page 48: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/48.jpg)
Release-сборка – это…
… то, что поступает на тестирование или в продакшн
![Page 49: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/49.jpg)
КомпиляцияРазвертываниеИнтеграция БДЗагрузка начальных данныхЮнит-тестированиеСекьюрити тестыПроверка целостностиТесты на производительность
Release-сборка
![Page 50: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/50.jpg)
Резюмируя изложенное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: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/51.jpg)
Классификация развертываний
Статическое – когда запускается контейнер приложений
На лету – возможность развертывать приложение во время работы контейнера приложений. Без перезапуска
![Page 52: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/52.jpg)
Классификация развертываний
• Удаленные– Требуют соединения
• Локальные– Не требуют соединения
![Page 53: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/53.jpg)
Инкрементальное развертывание• Rsync
– Синхронизирует файлы и директории для двух разных мест
• SVN export – только измененные файлы– svn diff –summarize /path1 /path2
• Развертывание добавленных/измененных с момента последней ревизии файлов– svn status
В большинстве случаев это - …
Головная боль!
![Page 54: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/54.jpg)
Задачи развертывания
• Развертывание– Собственно развертывание– Запуск/перезапуск/остановка веб-сервера
• Интеграция БД– Генерация моделей– Дамп данных– Миграции– Фикстуры– …
![Page 55: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/55.jpg)
Типичные случаи развертывания
1. Локальное приложение
2. Несколько локальных приложений
3. Удаленные приложения, соответствующие локальным
4. Высоконагруженное приложение
![Page 56: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/56.jpg)
WC (working copy, trunk)
dbinstance
локальноеразвертывание
№1
![Page 57: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/57.jpg)
WC (working copy, trunk)
dev db
dev instance
test db
test instance
prod db
prod instance
локальное развертывание
№2
![Page 58: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/58.jpg)
WC (working copy, trunk)локальное развертывание
dev
+
test
+
prod
+
prod
+
test
+
dev
+
удаленное развертывание
№3
![Page 59: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/59.jpg)
Высоконагруженные приложения – тема отдельного доклада
№4
![Page 60: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/60.jpg)
Пример в студию!
![Page 61: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/61.jpg)
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: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/62.jpg)
Основные правила билд-менеджмента
• Сборки должны быть отделены от IDE• Выполняйте быстрые тесты первыми
– Руководствуйтесь подходом staged-сборок • Чем раньше упадет билд, тем лучше
– Приоритизируйте задачи сборки• Собирайте компоненты отдельно
– Рекурсивная сборка• Централизуйте доступ к ресурсам проекта
– Исходники к исходникам (контроль версий)– Бинарники к бинарнкам (выделенные репозитории)
• Продуманная структура директорий проекта– Разработайте соглашения если еще нет таковых
![Page 63: управление сборками и развертыванием веб приложений](https://reader035.fdocument.pub/reader035/viewer/2022081717/554bc732b4c90594278b55ee/html5/thumbnails/63.jpg)
Спасибо за внимание