2010-05-25 3 views
4

Моя компания предоставляет большое .NET-ориентированное решение. Уровень сервисов взаимодействует с T-SQL-сервером, состоящим из сотен таблиц и хранимых процедур. Наш код C# находится в управлении версиями (SVN), но наши хранимые процедуры и схема отсутствуют.Сохраненные процедуры в контроле источника - автоматизация процесса сборки/развертывания

После долгого лоббирования целесообразного верхнего управления, мне разрешило ознакомиться с нашим (несуществующим) процессом сборки/развертываний для достижения следующих целей:

  1. Места схема и хранимые процедуры в соответствии с исходным-контролем.
  2. Автоматизация процесса сборки/развертывания.

Я хотел бы продолжить в стратегии принято отвечать в this post, но есть дополнительные вопросы:

  1. Я хотел бы использовать Хадсон как мой сборки сервера. Является ли это разумным выбором для решения C#/SQL? Какие лучшие альтернативы мне следует изучить?

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

  3. Как выглядит процесс выполнения обновления на клиенте? то есть я должен сохранить существующие данные таблицы. Как изменить изменения схемы?

  4. Я единственный программист. Некоторым другим псевтехническим сотрудникам нравится вносить изменения непосредственно в SQL Management Studio. Является ли реалистичным ожидать, что другие придерживаются этого решения - как я могу обеспечить это?

Заранее благодарю вас за помощь.

Edit:

К сожалению, мы не сможем использовать TFS. У нас есть Visual Studio 2008/2010 с доступными компонентами проекта базы данных, поэтому, похоже, мне придется взломать решение на основе скриптов. Любые предложения/обновления приветствуются.

ответ

4

Канонический пример в стеке Microsoft для развертывания T-SQL - это процесс развертывания проекта базы данных Visual Studio. В этом процессе ваша схема базы данных, процедуры, правильное назначение и почти все остальное хранятся как части проекта VSDB, а это означает, что они хранятся в виде файлов определения SQL и проверяются с помощью источника управления (SVN в порядке). Процесс «build» предоставляет файл .dbschema, который представляет собой файл, содержащий синтез всего проекта VSDB (это прославленный XML-файл). Затем файл .dbschema отправляется на сервер развертывания (сервер разработки, сервер проверки подлинности QA, даже сервер производительности) и «развернут». Развертывание выполняется с помощью инструмента vsdbcmd, который будет запускать сложную разницу между сервером развертывания и файлом .dbschema и «выровнять» сервер с содержимым файла .dbschema, используя соответствующие инструкции CREATE/ALTER/DROP, на основе того, что существует в целевой базе данных/сервере.

Смежно интегрированный процесс должен начинаться с ночной сборки, отбрасывать .dbschema вместе с другими версиями на тестовом SQL-сервере, развертывать.dbschema, затем выполните проверки валидации сборки, и, если все хорошо в итоге, вы потеряете полностью собранную и подтвержденную достоверность доставки, ежедневное «падение». Возможна полная интеграция всего процесса развертывания в производство, но обычно ее избегают из-за риска неожиданного простоя центрального, производственного, серверного. Однако полная интеграция и развертывание в производство обычно являются нормой для многосерверных сред, где «производство» означает сотни/тысячи развернутых серверов.

Теперь вы говорите, что хотите развернуть с использованием Hudson, что все хорошо, за исключением того, что вам нужно воссоздать все, что я опишу выше, как шаги по созданию муравьев, и вы потратите следующие 10 лет на разработку VS DB проектные концепции, такие как файл .dbschema и такие инструменты, как vsdbcmd. Я не из тех, кто может позвонить, чтобы инвестировать в покупку VSDB и TFS на основе лицензии сервера сборки, но я говорю, что я не знаю о сквозном решении, доступном в OSS. Я полагаю, что с VS 2010 проекты баз данных находятся в стандартной версии. С VS 2008 вам понадобится высокая лицензия.

С учетом того, что пользователи вносят изменения в стрельбу из SSMS: вы можете предотвратить их использование DDL triggers, вы можете отслеживать их с помощью Event Notifications, или вы можете полностью их провести, используя C2 compliant audit.

+1

«Что касается пользователей, которые делают изменения в ручном пистолете из SSMS: вы можете предотвратить их использование триггеров DDL, вы можете отслеживать их с помощью уведомлений о событиях, или вы можете полностью их проверять с помощью проверки на соответствие требованиям C2». Кроме того, вы можете перезаписать свои изменения тем, что находится в управлении источником. Не займет много времени, пока они не остановятся. Также имейте в виду свои права prod, поэтому любые изменения в prod должны быть развернуты через сценарии деполяции. – HLGEM

+0

Проблема с запуском разницы между нашими/их dbs заключается в том, что несколько клиентов активно добавляют свои собственные хранимые процедуры (а иногда даже и модифицируют наши собственные). Я хотел бы, чтобы мой процесс автоматизации выполнял однократное обновление, после чего я ничего не гарантирую. Похоже, я вынужден оставаться в наборе инструментов MS? Сообщение, на которое я ссылался, казалось, уклонился от этого. Спасибо за вашу помощь. – Alex

+0

Лично я использую версированные схемы и сценарии обновления, как описано в http://rusanu.com/2009/05/15/version-control-and-your-database. В моих продуктах я добавляю сценарии SQL в качестве ресурсов для приложения и запускаю их в соответствии с обновленной картой (т. Е. Запускает * этот * скрипт для обновления с версии с версии 1.3 до версии 1.4, а затем запускает * этот * скрипт для обновления от v1.4 до v1.5, затем * этот * скрипт и т. д., пока вы не дойдете до текущей версии). Я предпочитаю это в проектах VS DB, потому что мне не нравится, как vsdbcmd и другие инструменты на основе diff обрабатывают развертывание новой версии, особенно для больших таблиц. –

Смежные вопросы