Управление базой данных SQL Server с непрерывной интеграцией

StackOverflow https://stackoverflow.com/questions/405192

Вопрос

Допустим, у нас есть сервер непрерывной интеграции.Когда я регистрируюсь, post-hook извлекает последний код, запускает тесты и упаковывает все.Каков наилучший способ автоматизировать изменения базы данных?

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

Это было полезно?

Решение

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

Если вам это нравится и вы можете это реализовать, вы получите от этого большую отдачу, но это своего рода подход «все или ничего».Рекомендуемые.

Другие советы

Недавно я столкнулся с статья, это может быть полезно.

Автор объяснил некоторые из лучших практик непрерывной интеграции, включая тестирование, обработку и автоматизацию.

Вот некоторые из ключевых выводов:

  • Во многих магазинах код проходит модульное тестирование в момент фиксации.Для баз данных предпочтительнее запускать все модульные тесты одновременно и последовательно для базы данных контроля качества, а не для разработки в рамках этапа тестирования.
  • Этап тестирования является важной частью любого процесса CI/CD.Тестовые сценарии, включая сами модульные тесты, также должны иметь версии в системе контроля версий, извлекаться на этапе сборки и выполняться.
  • Извлечение данных из производства привлекательно как быстрый способ, но никогда не является хорошей идеей.
  • Лучший подход — использовать инструмент или сценарий для быстрого, многократного и надежного создания синтетических тестовых данных для ваших транзакционных таблиц.
  • Запуск модульных тестов для получения сводных результатов вручную для потребления человеком противоречит цели автоматизации.Нам нужны машиночитаемые результаты, которые могут позволить автоматизированному процессу прерваться, разветвиться и/или продолжиться.
  • Запуск процесса CI, для прохождения которого требуется 100 % всех тестов, сродни отсутствию CI вообще, если конвейер рабочего процесса настроен на атомарную остановку в случае сбоя, что и должно быть.Чтобы разобраться, тесты должны иметь встроенные пороговые значения, которые будут вызывать ошибку, основанную либо на проценте неудачных тестов, либо, в некоторых случаях, на случае неудачи определенных тестов с высоким приоритетом.
  • Все процессы должны в конечном итоге выдавать логический результат «пройдено или не пройдено», но некоторые неавтоматизированные процессы могут легко попасть в ваш конвейер рабочего процесса CI (например,модульное тестирование).Программное обеспечение должно быть готово к любому конвейеру рабочего процесса, принимая известные входные данные и выдавая ожидаемые результаты — например, «пройдено», «не пройдено».
  • Процесс CI/CD должен быть прерван в случае сбоя и немедленно отправлено электронное письмо с уведомлением, а не продолжать цикл конвейера.
  • Процесс CI не должен повторяться до тех пор, пока не будут исправлены все ошибки в последней сборке.В случае сбоя вся команда должна получить уведомление о сбое, включающее как можно больше подробностей о том, что не удалось.
  • Если конвейер занимает 1 час от начала до конца, включая все тестирование, тогда все интервалы сборки должны быть установлены не менее чем на один час, а все новые фиксации должны быть поставлены в очередь и применены к следующей сборке.
  • В сценариях автоматизации не должно быть простых текстовых паролей.

Я бы предостерег от использования резервной копии базы данных в качестве артефакта разработки: большинство лучших практик CI предполагают, что вы управляете схемой, процедурами, триггерами и представлениями как первоклассными артефактами разработки.Побочным эффектом является то, что вы можете сделать еще один шаг вперед и использовать их для создания новой базы данных, когда захотите. В идеале у вас также есть некоторые данные, которые можно поместить в базу данных.

Вот версия с заметками, которая поможет вам замочить ноги, но в этом месте их много: http://www.infoq.com/news/2008/02/versioning_databases_series

Мне также нравятся некоторые идеи Скотта Эмблера, сайт хорош, но книга на удивление глубока для такого сложного набора задач.http://www.agiledata.org/ http://www.amazon.com/exec/obidos/ASIN/0321293533/ambysoftinc

Red Gate — довольно надежное решение, работающее «из коробки».Но самое приятное то, что вы можете интегрировать его в свой процесс непрерывной интеграции.Я использую его с Msbuild и Hudson.быстро объясняю, как это работает:http://blog.vincentbrouillet.com/post/2011/02/10/Database-schema-synchronisation-with-RedGate

если вам нужно узнать больше об этом, не стесняйтесь спрашивать

Подход Red Gate с использованием SQL Source Control и командной строки SQL Compare Pro подробно описан с примерами кода здесь:http://downloads.red-gate.com/HelpPDF/ContinousIntegrationForDatabasesUsingRedGateSQLTools.pdf

Трой Хант написал на Simple Talk статью под названием «Непрерывная интеграция баз данных SQL Server»:http://www.simple-talk.com/content/article.aspx?article=1247

Вы посмотрели СвободноМигратор?Загрузка по умолчанию включает сценарии Nant, которые можно легко добавить в CI.Бесплатный, с открытым исходным кодом и простой в использовании.Работает с самыми разными базами данных.

Последняя версия (5.0) DB Ghost не страдает от проблемы «символов, отличных от ASCII» (это просто означает, что файл имеет кодировку UTF8), и она должна быть в состоянии делать именно то, что вам нужно.

Кроме того, при желании эти инструменты можно использовать автономно для выполнения различных функций (написание сценариев, сборка, сравнение, обновление и упаковка), просто их совместное использование обеспечивает полный сквозной процесс, что увеличивает общую ценность больше, чем сумма его частей.

По сути, чтобы внести изменения в схему, вы обновляете сценарии создания отдельных объектов и сценарии вставки для каждой таблицы (для справочных данных), которые находятся под контролем исходного кода, точно так же, как вы разрабатываете базу данных «с первого дня».Инструменты DB Ghost используются для реализации всего этого путем создания этих сценариев в совершенно новой базе данных (при необходимости с использованием непрерывной интеграции), а затем сравнения и обновления целевой базы данных, которая может быть копией рабочей базы данных.В результате этого процесса создается дельта-скрипт, который можно использовать в реальной рабочей базе данных во время запуска.

Вы даже можете создать проект базы данных Visual Studio и добавить его в любые имеющиеся у вас решения.

Мальк

Я знаю, что этот пост старый, но у нас есть новое решение, использующее следующий подход:

  1. Разработчики сценария индивидуальных изменений SQL и совершить их для управления источником.
  2. Наша программа(OneScript) Вытаскивает файлы сценария изменения из управления источником, фильтрует и сортирует их, и генерирует один файл скрипта одного выпуска.
  3. Этот файл сценария выпуска затем применяется к базе данных для выпуска.

Наша домашняя страница здесь объясняет этот процесс более подробно и содержит ссылку на пример, который автоматически выполняет эти шаги с помощью перехватчика Subversion.Вскоре после фиксации разработчик получает электронное письмо с информацией о том, был ли выпуск успешным или содержал ошибки.Код PowerScript включен.

Отказ от ответственности. Я работаю в компании, которая создает OneScript.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top