Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Управление сборками и развертыванием веб-приложений<br />Шмаркатюк Сергей, Senior Software Engineer (EPAM Systems)<br />17...
Проекты растут в размерах<br />project<br />
… а значит становятся более громоздкими<br />
Рутина затягивает. Нужно больше времени, ресурсов, денег…<br />
Чтобы делать всё вручную!<br />
В том числе сборки!<br />
Значение автоматических сборок оказывается недооцененным…<br />
… и как результат: проект выходит из-под контроля<br />
Что делать?<br />
Нужно знать!<br />Что такое сборка.<br />Зачем вообще нужны сборки.<br />Типы сборок и их структура.<br />Чем отличается с...
И это не всё<br />Почему нужны развертывания?<br />Когда выполнять развертывание и как?<br />Какие существуют самые сложны...
Сборка – это…<br />Из<br />В<br />Процесс преобразования<br />Исполняемые на рабочей станции конечного пользователя<br />И...
Зачем нужно делать сборки?<br />Сборка<br />это результат<br />Конфигурации<br /><ul><li>Определенный набор компонентов ко...
Компоненты = функциональные модули
Компоненты и их версии выбираются для удовлетворения конкретных целей и задач</li></ul>Основные цели<br />Функциональность...
Зачем нужно делать сборки?<br />Вывод. Сборки нужны для:<br /><ul><li>Поддержки дополнительной функциональности (фичи)
Достижения определенного уровня производительности</li></ul>А как насчет данных?<br /><ul><li>Данные живут сами по себе
Для их комфортного существования придумана интеграция баз данных (и миграции в частности)</li></li></ul><li>Самые сложные ...
Тип сборки: debug или release
Операционная система, аппаратная платформа (x32, x64, …)
Локализация(en, ru, ua, …)
Платформа(development, test, integration, production)
Зрелость(alpha, beta, release candidate, stable)
…</li></li></ul><li>Что такое вариант приложения?<br />Вариант – это результат сборки, характеризуемый набором специфическ...
Сборки и варианты приложений<br />Сборка:<br />install.msi<br />Вариант:<br />AppName-1.1.8.en.x32_beta.msi<br />Пример из...
Как управлять процессом сборки?<br />
<ul><li>Компиляция
Развертывание
Интеграция БД
Юнит-тестирование
Покрытие кода тестами
Статический анализ
Метрики исходного кода
Динамический анализ
Генерация документации
…</li></ul>Задачи<br />сборки<br />
Главный принцип – приоритизация задач<br />
Есть тонкий момент…<br />
В чем разница между…<br />Сборкой<br />Развертыванием<br />и<br />?<br />
Развертывание – это процесс установки ПО<br />
Тогда как…<br />сборка – это процесс создания артефактов для последующей инсталляции<br />
Но!<br />Для веб-приложенийсборка и развертывание – суть одно и то же<br />=<br />
Если точнее, то…<br />Утверждение «сборка=развертывание» – справедливо для веб-приложений, использующих интерпретируемые я...
Может возникать путаница<br />Считается, что веб-приложения нужно развертывать<br />
Но мы все равно будем говорить о сборках…<br />…так как развертывание – это составная часть сборок<br />
Результаты сборок<br /><ul><li>Исполняемые файлы
.exe, .bin, .msi, .cab, …
Библиотеки
.dll, .lib, .so, …
Архивы
.zip, .tar.gz, .bz2, .7z, .ear, .jar, .war, .sar, …
Пакеты
.rpm, .deb, …</li></li></ul><li>Результаты развертывания<br /><ul><li>Installed application
Updated database
Added incremental changes
Unpackaged library
…</li></li></ul><li><ul><li>Build
Deployment
Runs on single machine
Does not require remote connection
Creates application installation
Makes sense always
Upcoming SlideShare
Loading in …5
×

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

2,159 views

Published on

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

Published in: Technology, Business
  • Be the first to comment

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

  1. 1. Управление сборками и развертыванием веб-приложений<br />Шмаркатюк Сергей, Senior Software Engineer (EPAM Systems)<br />17 мая 2010 года<br />
  2. 2. Проекты растут в размерах<br />project<br />
  3. 3. … а значит становятся более громоздкими<br />
  4. 4. Рутина затягивает. Нужно больше времени, ресурсов, денег…<br />
  5. 5. Чтобы делать всё вручную!<br />
  6. 6. В том числе сборки!<br />
  7. 7. Значение автоматических сборок оказывается недооцененным…<br />
  8. 8. … и как результат: проект выходит из-под контроля<br />
  9. 9. Что делать?<br />
  10. 10. Нужно знать!<br />Что такое сборка.<br />Зачем вообще нужны сборки.<br />Типы сборок и их структура.<br />Чем отличается сборка от развертывания (deployment).<br />Какие есть типы целевых платформ.<br />Как эффективно использовать нужные инструменты.<br />
  11. 11. И это не всё<br />Почему нужны развертывания?<br />Когда выполнять развертывание и как?<br />Какие существуют самые сложные случаи сборок?<br />Как собрать веб-приложениеи зачем это нужно делать?<br />И в конце зарубить на носу ряд правил касающихся сборок<br />
  12. 12. Сборка – это…<br />Из<br />В<br />Процесс преобразования<br />Исполняемые на рабочей станции конечного пользователя<br />Исходного кода<br />Артефакты<br />
  13. 13. Зачем нужно делать сборки?<br />Сборка<br />это результат<br />Конфигурации<br /><ul><li>Определенный набор компонентов конкретных версий
  14. 14. Компоненты = функциональные модули
  15. 15. Компоненты и их версии выбираются для удовлетворения конкретных целей и задач</li></ul>Основные цели<br />Функциональность<br />Производительность<br />
  16. 16. Зачем нужно делать сборки?<br />Вывод. Сборки нужны для:<br /><ul><li>Поддержки дополнительной функциональности (фичи)
  17. 17. Достижения определенного уровня производительности</li></ul>А как насчет данных?<br /><ul><li>Данные живут сами по себе
  18. 18. Для их комфортного существования придумана интеграция баз данных (и миграции в частности)</li></li></ul><li>Самые сложные сборки это…<br />Сборки имеющие все нижеперечисленные параметры:<br /><ul><li>Версия
  19. 19. Тип сборки: debug или release
  20. 20. Операционная система, аппаратная платформа (x32, x64, …)
  21. 21. Локализация(en, ru, ua, …)
  22. 22. Платформа(development, test, integration, production)
  23. 23. Зрелость(alpha, beta, release candidate, stable)
  24. 24. …</li></li></ul><li>Что такое вариант приложения?<br />Вариант – это результат сборки, характеризуемый набором специфических параметров и их значениями<br />
  25. 25. Сборки и варианты приложений<br />Сборка:<br />install.msi<br />Вариант:<br />AppName-1.1.8.en.x32_beta.msi<br />Пример из жизни:<br />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<br />17<br />
  26. 26. Как управлять процессом сборки?<br />
  27. 27.
  28. 28. <ul><li>Компиляция
  29. 29. Развертывание
  30. 30. Интеграция БД
  31. 31. Юнит-тестирование
  32. 32. Покрытие кода тестами
  33. 33. Статический анализ
  34. 34. Метрики исходного кода
  35. 35. Динамический анализ
  36. 36. Генерация документации
  37. 37. …</li></ul>Задачи<br />сборки<br />
  38. 38. Главный принцип – приоритизация задач<br />
  39. 39. Есть тонкий момент…<br />
  40. 40. В чем разница между…<br />Сборкой<br />Развертыванием<br />и<br />?<br />
  41. 41. Развертывание – это процесс установки ПО<br />
  42. 42. Тогда как…<br />сборка – это процесс создания артефактов для последующей инсталляции<br />
  43. 43. Но!<br />Для веб-приложенийсборка и развертывание – суть одно и то же<br />=<br />
  44. 44. Если точнее, то…<br />Утверждение «сборка=развертывание» – справедливо для веб-приложений, использующих интерпретируемые языки программирования<br />
  45. 45. Может возникать путаница<br />Считается, что веб-приложения нужно развертывать<br />
  46. 46. Но мы все равно будем говорить о сборках…<br />…так как развертывание – это составная часть сборок<br />
  47. 47. Результаты сборок<br /><ul><li>Исполняемые файлы
  48. 48. .exe, .bin, .msi, .cab, …
  49. 49. Библиотеки
  50. 50. .dll, .lib, .so, …
  51. 51. Архивы
  52. 52. .zip, .tar.gz, .bz2, .7z, .ear, .jar, .war, .sar, …
  53. 53. Пакеты
  54. 54. .rpm, .deb, …</li></li></ul><li>Результаты развертывания<br /><ul><li>Installed application
  55. 55. Updated database
  56. 56. Added incremental changes
  57. 57. Unpackaged library
  58. 58. …</li></li></ul><li><ul><li>Build
  59. 59. Deployment
  60. 60. Runs on single machine
  61. 61. Does not require remote connection
  62. 62. Creates application installation
  63. 63. Makes sense always
  64. 64. Primary
  65. 65. Might be executed on several machines
  66. 66. Requires connection to the remote server
  67. 67. Installs application
  68. 68. Makes sense only in case of distributed or remote application
  69. 69. Secondary</li></li></ul><li>
  70. 70. Классификация сборок по целевому назначению<br />
  71. 71. Целевые платформы (Rails)<br />
  72. 72.
  73. 73.
  74. 74. Фазы сборок<br /><ul><li>Pre-build
  75. 75. Очистка
  76. 76. Инициализация
  77. 77. Проверка свободного места
  78. 78. Build
  79. 79. Развертывание
  80. 80. Юнит-тестирование
  81. 81. Инспекции
  82. 82. Post-build
  83. 83. Генерациядокументации
  84. 84. Проверка ошибок сборки
  85. 85. Секьюрити-тесты
  86. 86. Тегирование</li></li></ul><li>Определение фаз сборок необходимо с целью создания staged-сборки<br />staged-сборка позволяет приложению быть доступным для использования как можно раньше<br />Это и ежу понятно!<br />
  87. 87.
  88. 88. Конечно же rake + capistrano!<br />+<br />и еще…<br />
  89. 89.
  90. 90. И тут пошла жесть!<br />
  91. 91. Задачисборки<br />rake задачи<br /><ul><li>Компиляция
  92. 92. Развертывание
  93. 93. Интеграция БД
  94. 94. Юнит-тестирование
  95. 95. Анализ покрытия кода
  96. 96. Статическийанализ
  97. 97. Метрики исходногокода
  98. 98. Динамическийанализ
  99. 99. Генерациядокументации
  100. 100.
  101. 101. task :compile
  102. 102. task :deploy
  103. 103. task :db:migrate
  104. 104. task :test:unit
  105. 105. task :coverage:check
  106. 106. task :inspections:run
  107. 107. task :metrics:gather
  108. 108. task :test:benchmark
  109. 109. task :doc:generate
  110. 110. …</li></li></ul><li>Основная идея<br />Зависимости между rake-задачами организуются исходя из набора необходимых типов сборки:<br />(local, private, test, integration, release)<br />Для построения зависимостей используется приоритизированный список задач сборки:<br />(компиляция, развертывание, интеграция бд, …)<br />Задачам сборки соответствует одна или более rake-задач: (:compile, :deploy:, db:migrate)<br />
  111. 111. Private-сборка<br /><ul><li>Развертывание
  112. 112. Интеграция БД (migrations)
  113. 113. Загрузка стартовых данных (fixtures)
  114. 114. Юнит-тестирование
  115. 115. Простой статический анализ</li></li></ul><li>Local-сборка – это…<br />…то, что мы должны сделать после ковыряния в развернутом dev-приложении<br />
  116. 116. Local-сборка<br />Компиляция<br />Развертывание<br />Интеграция БД<br />Загрузка начальных данных<br />Юнит-тестирование<br />Простой статический анализ<br />
  117. 117. Private-сборка – это…<br />…полная пересборка локального dev-приложения<br />
  118. 118. Компиляция<br />Развертывание<br />Интеграция БД<br />Загрузка начальных данных<br />Юнит-тестирование<br />Простой статический анализ<br />Private-сборка (development)<br />
  119. 119. Integration-сборка – это…<br />… сборка, которую запускает continuous integration сервер<br />
  120. 120. Компиляция<br />Развертывание<br />Интеграция БД<br />Загрузка начальных данных<br />Юнит-тестирование<br />Статический анализ<br />Динамический анализ<br />Генерация документации<br />Сбор метрик<br />Integration-сборка<br />
  121. 121. Release-сборка – это…<br />… то, что поступает на тестирование или в продакшн<br />
  122. 122. Release-сборка<br />Компиляция<br />Развертывание<br />Интеграция БД<br />Загрузка начальных данных<br />Юнит-тестирование<br />Секьюрити тесты<br />Проверка целостности<br />Тесты на производительность<br />
  123. 123. Резюмируя изложенное<br />namespace 'build'do<br /> task :local => ['compile', 'test:unit'] do<br /># ...<br />end<br />task :private => ['compile', 'deploy:private', 'db:migrate', 'db:fixtures', 'test:unit', ‘inspections:run'] do<br /># ...<br />end<br />task :integration => ['compile', 'deploy:integration', 'db:migrate', 'db:fixtures', 'test:unit', 'inspections:run', 'dynamic_analysis', 'doc:generate', 'metrics:gather'] do<br /># ...<br />end<br />task :release => ['compile', 'deploy:release', 'db:migrate', 'db:fixtures', 'test:unit', 'test:security', 'test:integrity', 'test:performance'] do<br /># ...<br />end<br />end<br />
  124. 124. Как управлять развертываниями?<br />Точно так же, как и сборками<br />
  125. 125. Классификация развертываний<br />Статическое – когда запускается контейнер приложений<br />На лету –возможность развертывать приложение во время работы контейнера приложений. Без перезапуска<br />
  126. 126. Классификация развертываний<br /><ul><li>Удаленные
  127. 127. Требуют соединения
  128. 128. Локальные
  129. 129. Не требуют соединения</li></li></ul><li>Инкрементальное развертывание<br /><ul><li>Rsync
  130. 130. Синхронизирует файлы и директории для двух разных мест
  131. 131. SVN export – только измененные файлы
  132. 132. svn diff –summarize /path1 /path2
  133. 133. Развертывание добавленных/измененных с момента последней ревизии файлов
  134. 134. svn status</li></ul>В большинстве случаев это - …<br />Головная боль!<br />
  135. 135. <ul><li>Static
  136. 136. Hot
  137. 137. Ability to deploy/undeploydeployables into a running container
  138. 138. Incremental
  139. 139. Deploying only changed files/artifacts
  140. 140. Remote
  141. 141. Requires connection via specified protocol
  142. 142. Local
  143. 143. Does not require connection</li></li></ul><li>
  144. 144. Задачи развертывания<br /><ul><li>Развертывание
  145. 145. Собственно развертывание
  146. 146. Запуск/перезапуск/остановкавеб-сервера
  147. 147. Интеграция БД
  148. 148. Генерация моделей
  149. 149. Дамп данных
  150. 150. Миграции
  151. 151. Фикстуры
  152. 152. …</li></li></ul><li><ul><li>Rsync
  153. 153. synchronizes files and directories from one location to another
  154. 154. SVN export only changed files
  155. 155. svn diff –summarize /path1 /path2
  156. 156. Deploy only files modified/added since last revision
  157. 157. svn status</li></ul>In most cases it’s just a…<br />HEADACHE!<br />
  158. 158. Типичные случаи развертывания<br />Локальное приложение<br />Несколько локальных приложений<br />Удаленные приложения, соответствующие локальным<br />Высоконагруженное приложение<br />
  159. 159. WC (working copy, trunk)<br />локальноеразвертывание<br />db<br />instance<br />№1<br />
  160. 160. WC (working copy, trunk)<br />локальное развертывание<br />dev instance<br />test instance<br />prod instance<br />№2<br />dev db<br />test db<br />prod db<br />
  161. 161. +<br />+<br />+<br />test<br />prod<br />dev<br />локальное развертывание<br />WC (working copy, trunk)<br />удаленное развертывание<br />+<br />+<br />+<br />№3<br />prod<br />test<br />dev<br />
  162. 162. Высоконагруженные приложения – тема отдельного доклада<br />№4<br />
  163. 163. Пример в студию!<br />
  164. 164. Определите какие типы развертывания вы будете использовать Define what deployment type you will use (inherits from corresponding build type)<br />
  165. 165. Define what deployment type you will use (inherits from corresponding build type)<br />Define what deployment tasks you need<br />For each deployment type prioritize chosen tasks<br />Define destinations (production, test, development)<br />Map destinations and deployment types<br />Configure deployment destinations environment<br />
  166. 166. WC (working copy)<br />Репозиторий<br />Развернутое приложение<br />svn up<br />r1049<br />ant build-private<br />r1050<br />r1051<br />r1052<br />(#146)<br />development<br />changeset<br />Второе развернутое приложение<br />…<br />manual merge<br />svn up<br />r1126<br />resolve conflicts<br />ant build-private –Dinstance=2<br />svn commit<br />yes<br />OK?<br />no<br />make corrections<br />manual merge<br />svn commit<br />
  167. 167. Основные правила билд-менеджмента<br /><ul><li>Сборки должны быть отделены от IDE
  168. 168. Выполняйте быстрые тесты первыми
  169. 169. Руководствуйтесь подходом staged-сборок
  170. 170. Чем раньше упадет билд, тем лучше
  171. 171. Приоритизируйте задачи сборки
  172. 172. Собирайте компоненты отдельно
  173. 173. Рекурсивная сборка
  174. 174. Централизуйте доступ к ресурсам проекта
  175. 175. Исходники к исходникам(контроль версий)
  176. 176. Бинарники к бинарнкам (выделенные репозитории)
  177. 177. Продуманная структура директорий проекта
  178. 178. Разработайте соглашения если еще нет таковых</li></li></ul><li><ul><li>Separate build from IDE
  179. 179. Run faster tests first
  180. 180. Introduce staging into build process
  181. 181. Fail build fast
  182. 182. Organize build targets by priority
  183. 183. Build components separately
  184. 184. Recursive build
  185. 185. Centralization of project assets
  186. 186. Put sources to sources (VCS)
  187. 187. Put binaries to binaries (dedicated repositories)
  188. 188. Consistent directory structure
  189. 189. Develop project structure conventions</li></li></ul><li>Управление сборками и развертыванием<br />Define what build/deployment tasks you need<br />Define what build types you need<br />Choose build/deployment phases you will need<br />Prioritize chosen tasks with regard to corresponding build types<br />Choose build tool<br />Structure your build file<br />Define deployment destinations<br />Map build types and deployment destinations<br />Configure deployment destinations environment<br />
  190. 190. Спасибо за внимание<br />

×