Владимир БаховAT-Consultingvbakhov@at-consulting.ru+7 (905) 7165446Светлана ПанфиловаAT-Consultingspanfilova@at-consulting...
Q: Что такое непрерывная интеграция?A: Система, которая позволяет делать жизнь команды разработки многокомфортнее!Непрерыв...
Вернемся на землю и посмотрим с какими сложностями приходитсясталкиваться без CI.                                         ...
4
Ручные действия при сборке скриптов наката неизбежно ведут к дефектам и ошибкам                                           ...
6
7
8
9
10
11
12
НедостаткиНеобходимо время на разворачивание и настройку системы CIНеобходимы хорошие автоматизированные тесты для раскрыт...
Приложениe Ценностью является только код приложения и файлыконфигурацииБаза данных Ценностью является не только код, но и ...
ПриложениeНакат изменений происходит заменой старых файлов на новые.Последовательность не важна.База данныхДля установки о...
ПриложениeЕдиный репозиторий контроля версий хранит всю историю изменений. Четкиеправила работы с репозиторием.База данных...
Приложениe Откат на n версий назад простБаза данных Откат на n версий назад требует написания трудоемкого ручногоскрипта, ...
Приложениe Существующие программы CI автоматизируют сборкуприложений «щелчками мыши»База данных Нет универсальных программ...
19
Самый главный слайд!CI для базы данных является достаточно сложным инструментом разработки.Но в жизни всему можно научитьс...
21
22
У вас должны быть автоматизированные тесты базы данных, иначе CI не имеетсмысла. UTPLSql – наш любимый фрэймворк создания ...
ПО непрерывной интеграции для автоматизированной сборки скриптов накатаи их развертывания                                 ...
Остановимся на системе версионности более подробно.                                                      25
Все изменения должны происходить скриптами (никаких измененийструктуры таблицы через GUI, например SQL Навигатора).  Скрип...
Организация работы с ветками и способ сборки релиза для кода базы данныхотличается от классического подхода, используемого...
Live Demo            28
Все версии изменений кода, структур и данных за всю историю проектадоступны в папке TRUNK.TRUNK – единая мастер копия базы...
Удобная для разработчиков организация – объекты кода и скриптыизменения структур и данных не раскиданы по папкам разных ре...
31
День.Итеративная разработка/bugfix и сommits в систему контроля версий.Ночь.1) ProdLike FlashBack() или востановление из C...
Первоначальное получение Prod-like DB         Импорт дампа утилитой impdp         Восстановление из бэкапаОчистка (удалени...
В папке «prod» хранится текущий исходный код (как на продуктиве). Папкаиспользуется как эталон для сравнения при генерации...
Разница между prod и trunk получается посредством svn-команды diffПатч получается посредством команды export над результат...
ANT: SQLPLUS вызывает все SQL-файлы из имеющихся директорий вопределенном порядке.Варианты наката патча.  Последовательный...
excludes тасков concat или fileset. Таким образом, из наката можно исключатьпакеты автоматизированного тестирования, котор...
Согласно описанной методологии с помощью ANT скриптов подключитеавтоматическую сборку скриптов наката релиза из системы ко...
38
39
40
* ВСЕМИ – не всегда обязательно – ваша система автотестирования можетполучать из системы контроля версий только изменившие...
оптимизируйте автотесты      используйте синтетические данные      автоматизируйте получение синтетических данныхинвестиру...
43
Разработчик может поднять нужную легковесную версию базы из скриптовнаката и дампа в системе контроля версий на требуемой ...
45
46
47
Разъяснения по данным пунктам можно найти здесь:http://en.wikipedia.org/wiki/Continuous_integration                       ...
49
50
51
http://ru.wikipedia.org/wiki/ANT                                   52
53
Maven нужен, т.к. его понимает любое стандартное ПО для CI (Bamboo, Hudson,CruiseContro,TeamCity…). К Maven есть плагин, п...
55
Непрерывная интеграция при разработке баз данных. (Show version)
Upcoming SlideShare
Loading in …5
×

Непрерывная интеграция при разработке баз данных. (Show version)

1,980 views

Published on

Непрерывная интеграция при разработке баз данных.

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,980
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
28
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Непрерывная интеграция при разработке баз данных. (Show version)

  1. 1. Владимир БаховAT-Consultingvbakhov@at-consulting.ru+7 (905) 7165446Светлана ПанфиловаAT-Consultingspanfilova@at-consulting.ru+7 (903) 1696490Группа Google для данной презентации:vobaksИсходные коды проекта доступны на Google Code. 1
  2. 2. Q: Что такое непрерывная интеграция?A: Система, которая позволяет делать жизнь команды разработки многокомфортнее!Непрерывная интеграция нацелена на улучшения качества программногопродукта и скорости его предоставления. Традиционный подход к контролюкачества только после завершения разработки вытесняется непрерывнойинтеграцией в соответствии с agile парадигмами о том, что тестированиедолжно быть ранним, автоматическим и постоянным. 2
  3. 3. Вернемся на землю и посмотрим с какими сложностями приходитсясталкиваться без CI. 3
  4. 4. 4
  5. 5. Ручные действия при сборке скриптов наката неизбежно ведут к дефектам и ошибкам 5
  6. 6. 6
  7. 7. 7
  8. 8. 8
  9. 9. 9
  10. 10. 10
  11. 11. 11
  12. 12. 12
  13. 13. НедостаткиНеобходимо время на разворачивание и настройку системы CIНеобходимы хорошие автоматизированные тесты для раскрытия всегопотенциала CIКрупномасштабный рефакторинг может быть затруднен в виду постоянноменяющейся базы исходного кодаНеобходимость частой и быстрой сборки может потребовать догостоящихhardware ресурсовМногие команды, использующие CI, считают, что его достоинства с лихвойпревосходят недостатки. 13
  14. 14. Приложениe Ценностью является только код приложения и файлыконфигурацииБаза данных Ценностью является не только код, но и данные в базеP.S. Под приложением понимаются отличные от баз данных приложения,например Java, .net и т.п. 14
  15. 15. ПриложениeНакат изменений происходит заменой старых файлов на новые.Последовательность не важна.База данныхДля установки очередного релиза кроме замены кода, требуется запуск впродуктивной среде скриптов изменения структуры данных и, возможно,миграции данных. Для соблюдения целостности объекты и данные должныразворачиваться в строгой последовательности. 15
  16. 16. ПриложениeЕдиный репозиторий контроля версий хранит всю историю изменений. Четкиеправила работы с репозиторием.База данныхВерсионность кода может не использоваться. Отсутствует общепринятаяметодика работы с системой контроля версий для кода, скриптов измененияструктуры и данных. Нет правил синхронизации изменений кода несколькихразработчиков. 16
  17. 17. Приложениe Откат на n версий назад простБаза данных Откат на n версий назад требует написания трудоемкого ручногоскрипта, который зависит от текущей версии базы, или бывает невозможен. 17
  18. 18. Приложениe Существующие программы CI автоматизируют сборкуприложений «щелчками мыши»База данных Нет универсальных программных продуктов для поддержки CI БД.Скрипты наката для БД обычно собираются руками или в полуавтоматическомрежиме. 18
  19. 19. 19
  20. 20. Самый главный слайд!CI для базы данных является достаточно сложным инструментом разработки.Но в жизни всему можно научиться! Какой бы сложной не была база – этовозможно!Сначала наша база просто поднималась из дампа 20 часов. После 2х недельрефакторинга и оптимизаций мы добились времени в 20 минут. Сейчасустановка релиза базы (а мы делаем это минимум раз в день) занимаетпорядка 2х минут. 20
  21. 21. 21
  22. 22. 22
  23. 23. У вас должны быть автоматизированные тесты базы данных, иначе CI не имеетсмысла. UTPLSql – наш любимый фрэймворк создания автотестов для oracleбазы данных. Для автотестов oracle базы данных также можно использоватьToad Code Tester, SQL Unit test для SQL Developer, самописное решение.Автотестирование бд и ETL процессов – тема отдельной презентации 23
  24. 24. ПО непрерывной интеграции для автоматизированной сборки скриптов накатаи их развертывания 24
  25. 25. Остановимся на системе версионности более подробно. 25
  26. 26. Все изменения должны происходить скриптами (никаких измененийструктуры таблицы через GUI, например SQL Навигатора). Скрипты исходного кода вашей базы должны быть в виде файлов sql: пакеты,процедуры, представления, триггеры и т.д. Скрипты по изменению структуры имиграции данных должны быть в виде файлов sql: alter операции,создание/изменение таблиц insert операции итп. Скрипты - главный артифактпроекта. Все скрипты должны подпадать под систему контроля версий Скрипты имеют владельца, версию – их можно поддерживать В отличии от ручных изменений, скрипты можно автоматически запускать имногократно тестировать. Скрипты можно переносить на разные платформы и среды. Скрипты можно автоматически связать с задачами системы Bug Tracking (Jira итп.). Всегда можно посмотреть, кто, что и когда менял в рамках данной задачи. 26
  27. 27. Организация работы с ветками и способ сборки релиза для кода базы данныхотличается от классического подхода, используемого при разработке, скажем,WEB-приложений. Предполагается что у вас уже есть система контроля версийи вы умеете проводить с ней базовые операции. 27
  28. 28. Live Demo 28
  29. 29. Все версии изменений кода, структур и данных за всю историю проектадоступны в папке TRUNK.TRUNK – единая мастер копия базы. 29
  30. 30. Удобная для разработчиков организация – объекты кода и скриптыизменения структур и данных не раскиданы по папкам разных релизов.Чтобы начать работать над желаемым кодом достаточно открыть файл изпапки TRUNK в любимой IDE и сохранить перед выходом.При ветвлении разработки система исключает из скрипта наката ужепопавшие на продуктив не только изменения кода, но и измененийструктур, миграции и прочие ручные sql изменения по задачам баг-треккера. 30
  31. 31. 31
  32. 32. День.Итеративная разработка/bugfix и сommits в систему контроля версий.Ночь.1) ProdLike FlashBack() или востановление из Cold backup базы данных. Откат всех изменений. Возврат Prodlike среды в идентичное текущему продуктивному состояние2) Автоматически полученный как разница между папкой “Prod” и «Trunk», скрипт наката устанавливается на ProdLike. SQL файлы скрипта наката разворачиваются в фиксированном по типам объектов и типу изменений порядке (изменения структуры, код, потом миграции данных, рекомпиляция и т.п.)3) Запускается автоматизированное тестирование4) Файл текущей версии скрипта наката поступает в репозиторий релизов5) На Dashboard cервера CI Поступает отчет о ночной сборке и пройденных тестах6) Заинтересованным лицам и ответственным за дефекты разработчикам рассылаются уведомления 32
  33. 33. Первоначальное получение Prod-like DB Импорт дампа утилитой impdp Восстановление из бэкапаОчистка (удаление лишних партиций и т. п.)Сохранение нового дампа в SVN папку “dump” для быстрого развертыванияновых сред CI 33
  34. 34. В папке «prod» хранится текущий исходный код (как на продуктиве). Папкаиспользуется как эталон для сравнения при генерации скрипта наката.Структура «trunk» аналогична «prod», но в данной папке ведется разработка.В нулевой точке папки «trunk» и «prod» равны.Запись DDL кода в файловую систему с помощью UTL_FILE. Каждый объектрасполагается в отдельном файле. Types, Type Bodies. Создание и удаление типов в правильном порядке.Сначала каскадно (по dba_dependencies) удаляются, затем создаются в порядкезависимостей друг от друга. Гранты на них. Все типы системы хранятся в одномфайле, и перенакатываются целиком Triggers. Исключение триггеров на views и materialzied views. Functions, Procedures, Packages. Гранты на них. Views, а также триггеры и гранты на них. Materialized Views. Триггеры, индексы и гранты на них. Package Bodies. … 34
  35. 35. Разница между prod и trunk получается посредством svn-команды diffПатч получается посредством команды export над результатом diffПапка patch повторяет структуру папок prod и trunk, но содержит только теподпапки и файлы, которые образуют разницу между prod и trunk 35
  36. 36. ANT: SQLPLUS вызывает все SQL-файлы из имеющихся директорий вопределенном порядке.Варианты наката патча. Последовательный накат всех sql-файлов, отсортированных по имени, из всех директорий, попавших в папку patch. В данном случае для установки патча на продуктив администратор должен также использовать svn и вызывать установку из ant, задавая параметры (логин/пароль/sid) через файл свойств (build.properties) Конкатенация всех sql-файлов в отсортированном порядке и накат единого файла. В данном случае администратору высылается единый sql-файл, который он может запустить из sqlplusСредства ant, используемые для наката скриптов Для наката sql-файлов через sqlplus используется плагин incanto для ant, обеспечивающий портируемость на разные среды Из наката можно исключать файлы посредством указания маски в атрибуте 36
  37. 37. excludes тасков concat или fileset. Таким образом, из наката можно исключатьпакеты автоматизированного тестирования, которые должны попадатьтолько на среды тестирования и CI 36
  38. 38. Согласно описанной методологии с помощью ANT скриптов подключитеавтоматическую сборку скриптов наката релиза из системы контроля версий ксистеме CI (Ant плагин для Maven), также к CI подключите ваши автотесты (мыиспользуем The Maven utPLSQL plugin). 37
  39. 39. 38
  40. 40. 39
  41. 41. 40
  42. 42. * ВСЕМИ – не всегда обязательно – ваша система автотестирования можетполучать из системы контроля версий только изменившиеся за день объекты инайти все зависимые по коду от них объекты (в oracle это делает черезdba_dependencies). В ETL программных продуктах вы также можетеанализировать зависимости. 41
  43. 43. оптимизируйте автотесты используйте синтетические данные автоматизируйте получение синтетических данныхинвестируйте в инфраструктуруиспользуйте базовые средства системы CI по распараллеливаниювычислений на подключенных машинах (build agent) 42
  44. 44. 43
  45. 45. Разработчик может поднять нужную легковесную версию базы из скриптовнаката и дампа в системе контроля версий на требуемой среде для целейразветвленной разработки и тестирования. 44
  46. 46. 45
  47. 47. 46
  48. 48. 47
  49. 49. Разъяснения по данным пунктам можно найти здесь:http://en.wikipedia.org/wiki/Continuous_integration 48
  50. 50. 49
  51. 51. 50
  52. 52. 51
  53. 53. http://ru.wikipedia.org/wiki/ANT 52
  54. 54. 53
  55. 55. Maven нужен, т.к. его понимает любое стандартное ПО для CI (Bamboo, Hudson,CruiseContro,TeamCity…). К Maven есть плагин, позволяющий из него запускатьANT, с помощью которого, мы и автоматизировали непрерывную интеграциюдля базы данных. 54
  56. 56. 55

×