SlideShare a Scribd company logo
1 of 57
Download to read offline
Владимир Бахов
AT-Consulting
vbakhov@at-consulting.ru
+7 (905) 7165446

Светлана Панфилова
AT-Consulting
spanfilova@at-consulting.ru
+7 (903) 1696490

Группа Google для данной презентации:vobaks
Исходные коды проекта доступны на Google Code.




                                                 1
Q: Что такое непрерывная интеграция?
A: Система, которая позволяет делать жизнь команды разработки много
комфортнее!

Непрерывная интеграция нацелена на улучшения качества программного
продукта и скорости его предоставления. Традиционный подход к контролю
качества только после завершения разработки вытесняется непрерывной
интеграцией в соответствии с agile парадигмами о том, что тестирование
должно быть ранним, автоматическим и постоянным.




                                                                         2
Вернемся на землю и посмотрим с какими сложностями приходится
сталкиваться без CI.




                                                                3
4
Ручные действия при сборке скриптов наката
 неизбежно ведут к дефектам и ошибкам




                                             5
6
7
8
9
10
11
12
Недостатки
Необходимо время на разворачивание и настройку системы CI
Необходимы хорошие автоматизированные тесты для раскрытия всего
потенциала CI
Крупномасштабный рефакторинг может быть затруднен в виду постоянно
меняющейся базы исходного кода
Необходимость частой и быстрой сборки может потребовать дорогостоящих
hardware ресурсов

Многие команды, использующие CI, считают, что его достоинства с лихвой
превосходят недостатки.




                                                                         13
Приложениe Ценностью является только код приложения и файлы
конфигурации
База данных Ценностью является не только код, но и данные в базе

P.S. Под приложением понимаются артефакты проекта отличные от баз данных–
программы написанные на Java, .NET и т.п.




                                                                            14
Приложениe
Накат изменений происходит заменой старых файлов на новые.
Последовательность не важна.


База данных
Для установки очередного релиза кроме замены кода, требуется запуск в
продуктивной среде скриптов изменения структуры данных и, возможно,
миграции данных. Для соблюдения целостности объекты и данные должны
разворачиваться в строгой последовательности.




                                                                        15
Приложениe
Единый репозиторий контроля версий хранит всю историю изменений. Четкие
правила работы с репозиторием.

База данных
Версионность кода может не использоваться. Отсутствует общепринятая
методика работы с системой контроля версий для кода, скриптов изменения
структуры и данных. Нет правил синхронизации изменений кода нескольких
разработчиков.




                                                                          16
Приложениe Откат на n версий назад прост

База данных Откат на n версий назад требует написания трудоемкого ручного
скрипта, который зависит от текущей версии базы, или бывает невозможен.




                                                                            17
Приложениe Существующие программы CI автоматизируют сборку
приложений «щелчками мыши»

База данных Нет универсальных программных продуктов для поддержки CI БД.
Скрипты наката для БД обычно собираются руками или в полуавтоматическом
режиме.




                                                                           18
19
Самый главный слайд!
CI для базы данных является достаточно сложным инструментом разработки.
Но в жизни всему можно научиться! Какой бы сложной не была база – это
возможно!
Сначала наша база просто поднималась из дампа 20 часов. После 2х недель
рефакторинга и оптимизаций мы добились времени в 20 минут. Сейчас
установка релиза базы (а мы делаем это минимум раз в день) занимает
порядка 2х минут.




                                                                          20
21
22
У вас должны быть автоматизированные тесты базы данных, иначе CI не имеет
смысла. UTPLSql – наш любимый фрэймворк создания автотестов для oracle
базы данных. Для автотестов oracle базы данных также можно использовать
Toad Code Tester, SQL Unit test для SQL Developer, самописное решение.
Автотестирование БД и ETL процессов – тема отдельной презентации.




                                                                            23
ПО непрерывной интеграции для автоматизированной сборки скриптов наката
и их развертывания




                                                                          24
Остановимся на системе версионности более подробно.




                                                      25
Все изменения должны происходить скриптами (никаких изменений
структуры таблицы через GUI, например SQL Навигатора).
  Скрипты исходного кода вашей базы должны быть в виде файлов sql: пакеты,
процедуры, представления, триггеры и т.д. Скрипты по изменению структуры и
миграции данных должны быть в виде файлов sql: alter операции,
создание/изменение таблиц insert операции итп. Скрипты - главный артифакт
проекта.
  Все скрипты должны подпадать под систему контроля версий
  Скрипты имеют владельца, версию – их можно поддерживать
  В отличии от ручных изменений, скрипты можно автоматически запускать и
многократно тестировать.
  Скрипты можно переносить на разные платформы и среды.
  Скрипты можно автоматически связать с задачами системы Bug Tracking (Jira и
тп.). Всегда можно посмотреть, кто, что и когда менял в рамках данной задачи.




                                                                                26
Организация работы с ветками и способ сборки релиза для кода базы данных
отличается от классического подхода, используемого при разработке, скажем,
WEB-приложений. Предполагается что у вас уже есть система контроля версий
и вы умеете проводить с ней базовые операции.




                                                                             27
Live Demo




            28
Все версии изменений кода, структур и данных за всю историю проекта
доступны в папке TRUNK.
TRUNK – единая мастер копия базы.




                                                                      29
Удобная для разработчиков организация – объекты кода и скрипты
изменения структур и данных не раскиданы по папкам разных релизов.
Чтобы начать работать над желаемым кодом достаточно открыть файл из
папки TRUNK в любимой IDE и сохранить перед выходом.
При ветвлении разработки система исключает из скрипта наката уже
попавшие на продуктив не только изменения кода, но и изменений
структур, миграции и прочие ручные sql изменения по задачам баг-
трекера.




                                                                      30
31
День.
Итеративная разработка/bugfix и сommits в систему контроля версий.

Ночь.
1) Prodlike FlashBack() или востановление из Cold backup базы данных. Откат
   всех изменений. Возврат Prodlike среды в идентичное текущему
   продуктивному состояние
2) Автоматически полученный как разница между папкой «Prod» и «Trunk»,
   скрипт наката устанавливается на ProdLike. SQL файлы скрипта наката
   разворачиваются в фиксированном по типам объектов и типу изменений
   порядке (изменения структуры, код, потом миграции данных,
   рекомпиляция и т.п.)
3) Запускается автоматизированное тестирование
4) Файл текущей версии скрипта наката поступает в репозиторий релизов
5) На Dashboard cервера CI поступает отчет о ночной сборке и пройденных
   тестах
6) Заинтересованным лицам и ответственным за дефекты разработчикам
   рассылаются уведомления




                                                                              32
Первоначальное получение Prodlike DB
         Импорт дампа утилитой impdp
         Восстановление из бэкапа
Очистка (удаление лишних партиций и т. п.)
Сохранение нового дампа в SVN папку «dump» для быстрого развертывания
новых сред CI




                                                                        33
В папке «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
Разница между prod и trunk получается посредством svn-команды diff
Патч получается посредством команды export над результатом diff
Папка patch повторяет структуру папок prod и trunk, но содержит только те
поддиректории и файлы, которые образуют разницу между prod и trunk




                                                                            35
ANT: SQLPLUS вызывает все SQL-файлы из имеющихся директорий в
определенном порядке.


Варианты наката патча.


  Последовательный накат всех sql-файлов, отсортированных по имени, из
  всех директорий, попавших в папку patch. В данном случае для установки
  патча на продуктив администратор должен также использовать svn и
  вызывать установку из ant, задавая параметры (логин/пароль/sid) через файл
  свойств (build.properties)
  Конкатенация всех sql-файлов в отсортированном порядке и накат единого
  файла. В данном случае администратору высылается единый sql-файл,
  который он может запустить из sqlplus


Средства ant, используемые для наката скриптов

  Для наката sql-файлов через sqlplus используется плагин incanto для ant,
  обеспечивающий портируемость на разные среды
  Из наката можно исключать файлы посредством указания маски в атрибуте




                                                                               36
excludes тасков concat или fileset. Таким образом, из наката можно исключать
пакеты автоматизированного тестирования, которые должны попадать
только на среды тестирования и CI




                                                                               36
Согласно описанной методологии с помощью ANT скриптов подключите
автоматическую сборку скриптов наката релиза из системы контроля версий к
системе CI, также к CI подключите ваши автотесты (мы используем maven-
utplsql-plugin).




                                                                            37
38
39
40
* ВСЕМИ – не всегда обязательно – ваша система автотестирования может
получать из системы контроля версий только изменившиеся за день объекты и
найти все зависимые по коду от них объекты (в oracle это делает через
dba_dependencies). В ETL программных продуктах вы также можете
анализировать зависимости.




                                                                            41
оптимизируйте автотесты
      используйте синтетические данные
      автоматизируйте получение синтетических данных
инвестируйте в инфраструктуру
используйте базовые средства системы CI по распараллеливанию
вычислений на подключенных машинах (build agent)




                                                               42
43
Разработчик может поднять нужную легковесную версию базы из скриптов
наката и дампа в системе контроля версий на требуемой среде для целей
разветвленной разработки и тестирования.




                                                                        44
Интегрируйтесь непрерывно.
Попробуйте перейти от ночной сборки к более частой сборке (например,
каждые 2 часа). И затем к сборке по каждому из коммитов.
Для этого придется отслеживать связи тестов и измененного функционала,
разделять быстрые и медленные тесты.




                                                                         45
46
47
48
Разъяснения по данным пунктам можно найти здесь:
http://en.wikipedia.org/wiki/Continuous_integration




                                                      49
50
51
52
http://ru.wikipedia.org/wiki/ANT




                                   53
54
Maven нужен, для запуска Unit-тестов UTPLSQL с помощью плагина maven-
utplsql-plugin.




                                                                        55
56

More Related Content

What's hot

Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration management
Sergii Shmarkatiuk
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
Sergii Shmarkatiuk
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
Technopark
 

What's hot (20)

Инструменты разработки ПО в *nix
Инструменты разработки ПО в *nixИнструменты разработки ПО в *nix
Инструменты разработки ПО в *nix
 
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
Иван Кожин «Saritasa Tools или ещё один подход к архитектуре приложения»
 
управление сборками и развертыванием веб приложений
управление сборками и развертыванием веб приложенийуправление сборками и развертыванием веб приложений
управление сборками и развертыванием веб приложений
 
Agile software configuration management
Agile software configuration managementAgile software configuration management
Agile software configuration management
 
Разработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешевоРазработка надежных параллельных, распределенных приложений: быстро и дешево
Разработка надежных параллельных, распределенных приложений: быстро и дешево
 
метод организации репозитория исходного кода
метод организации репозитория исходного кодаметод организации репозитория исходного кода
метод организации репозитория исходного кода
 
Net framework
Net frameworkNet framework
Net framework
 
Как это будет: ASP.NET Core
Как это будет: ASP.NET CoreКак это будет: ASP.NET Core
Как это будет: ASP.NET Core
 
Controlul versiunilor
Controlul versiunilor Controlul versiunilor
Controlul versiunilor
 
Software Development
Software DevelopmentSoftware Development
Software Development
 
Как приручить реактивное программирование
Как приручить реактивное программированиеКак приручить реактивное программирование
Как приручить реактивное программирование
 
Jelastic для разработчиков ПО
Jelastic для разработчиков ПОJelastic для разработчиков ПО
Jelastic для разработчиков ПО
 
Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5 Тестирование осень 2013 лекция 5
Тестирование осень 2013 лекция 5
 
Обзор Continuous integration инструментов
Обзор Continuous integration инструментовОбзор Continuous integration инструментов
Обзор Continuous integration инструментов
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Введение в maven
Введение в mavenВведение в maven
Введение в maven
 
DevOps guide for awesome quality assurance
DevOps guide for awesome quality assuranceDevOps guide for awesome quality assurance
DevOps guide for awesome quality assurance
 
Конфигурационное управление и управление изменениями с IBM Rational ClearCase...
Конфигурационное управление и управление изменениями с IBM Rational ClearCase...Конфигурационное управление и управление изменениями с IBM Rational ClearCase...
Конфигурационное управление и управление изменениями с IBM Rational ClearCase...
 
Honeywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services CenterHoneywell Industrial Cyber Security Lab & Services Center
Honeywell Industrial Cyber Security Lab & Services Center
 
"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)"Опыт создания системы управления сборкой и тестированием" (полная)
"Опыт создания системы управления сборкой и тестированием" (полная)
 

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

Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
Serghei Urban
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
qasib
 

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

Dev collaboration
Dev collaborationDev collaboration
Dev collaboration
 
Типовая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive TechnologiesТиповая сборка и деплой продуктов в Positive Technologies
Типовая сборка и деплой продуктов в Positive Technologies
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 
Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»Юрий Василевский «Автоматизация в XCode»
Юрий Василевский «Автоматизация в XCode»
 
Технологии разработки ПО
Технологии разработки ПОТехнологии разработки ПО
Технологии разработки ПО
 
C# Web. Занятие 14.
C# Web. Занятие 14.C# Web. Занятие 14.
C# Web. Занятие 14.
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Team workflow
Team workflowTeam workflow
Team workflow
 
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITYCONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
CONTINUOUS INTEGRATION ДЛЯ ЧАЙНИКОВ ВМЕСТЕ С TEAMCITY
 
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release NotesИнструмент ChangelogBuilder для автоматической подготовки Release Notes
Инструмент ChangelogBuilder для автоматической подготовки Release Notes
 
Liferay Portal и приемы разработки
Liferay Portal и приемы разработкиLiferay Portal и приемы разработки
Liferay Portal и приемы разработки
 
Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Проблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектовПроблемы и пути их решения при командной разработке проектов
Проблемы и пути их решения при командной разработке проектов
 
презентация.1
презентация.1презентация.1
презентация.1
 
Embarcadero All-Access
Embarcadero All-AccessEmbarcadero All-Access
Embarcadero All-Access
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
Java one presentation
Java one presentationJava one presentation
Java one presentation
 
Training Labs (www.cmcons.com)
Training Labs (www.cmcons.com)Training Labs (www.cmcons.com)
Training Labs (www.cmcons.com)
 

Recently uploaded

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 

Recently uploaded (9)

Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 

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

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