Автоматизация развертывания SQL - PullRequest
1 голос
/ 24 мая 2019

Я пытаюсь автоматизировать существующую автоматизацию развертывания базы данных сервера sql с помощью Jenkins.

Одним из способов автоматизации является включение сценариев SQL (хранимые процедуры, представления, создание таблиц) в проект базы данных SQL-сервера с использованием Visual Studio. Используйте MSBuild для сборки проекта и развертывания dacpac с помощью SQLPackage.exe. Однако в существующей базе данных есть ссылки на другие базы данных внутри хранимых процедур / представлений, поэтому я должен импортировать другие базы данных в проект базы данных SQL Server. Кроме того, я получаю много ошибок при извлечении dacpac из существующих баз данных. Я предполагаю, что это связано с тем, что существующий код не совместим с dacpac и может потребовать внесения изменений, чтобы быть совместимым с dacpac.

Есть ли другой способ автоматизировать развертывание кода SQL-сервера вместо использования проекта базы данных SQL Server?

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

SSDT - хороший вариант, однако вам и всем разработчикам потребуется некоторое время, чтобы привыкнуть к нему и понять, что такое автономная разработка и развертывание на основе состояния.Вы можете прочитать, как работает SSDT самостоятельно, однако есть несколько советов для вас:

  • Для каждой базы данных, связанной с вашими запросами, вам нужно создать проект
  • Если вы используете другую базу данных вкод, то этот проект должен быть добавлен в качестве ссылки
  • Вместо 3/4 имен частей в коде (server.database.schema.name или database.schema.name) создавать синонимы для каждогоодин объект и в синониме используйте переменные для имен серверов и баз данных
  • Не помещайте логины, пользователей и разрешения в этот проект
  • Создайте профили публикации и внимательно изучите все настройки (например, исключить пользователей, учетные записи, разрешения и т. д. из развертывания)
  • Существуют сценарии pre / post, в которых можно создавать обходные пути

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

Итак, если вы будете придерживаться SSDT, для вас появится следующая карта:

  • Создание проектов для всех баз данных, используемых вкод
  • Создание синонимов для всех объектов в проекте, которые взяты из другой базы данных с переменными в качестве базы данных и именами экземпляров (очень важный момент)
  • Использовать замену во всехнесколько файлов для всей внешней базы данных и экземпляров

СОВЕТ для замены.В коде есть несколько комбинаций имен объектов:

  • INSTANCE.DATABASE.SCHEMA.OBJECT
  • INSTANCE.DATABASE..OBJECT
  • INSTANCE ...OBJECT
  • Все другие комбинации с [] или "", например [dbo]. [SomeTable] или [dbo] .SomeTable

Итак, вы можете заменить INSTANCE с $ (InstanceName) для всех файлов, [База данных] с [$ (DatabaseName)] и т. Д.Проявите творческий подход и, в основном, когда вы знаете, что делать, с помощью этих приемов вы можете за несколько часов поставить практически любой дБ SSDT.

1 голос
/ 24 мая 2019

Альтернативой проектам на основе моделей SSDT является подход сценария миграции, как обсуждалось здесь .

При развертывании на основе моделей необходимо проверять зависимости во время сборки, иначе вы рискуете получить ошибкиво время развертывания.К сожалению, я не знаю простого способа создания dacpac для других ссылочных баз данных, которые не являются дружественными для dacpac, без усилий по созданию отдельных проектов для ссылочных баз данных, созданных из исходного кода.Вы можете создать проект базы данных для ссылочных баз данных и использовать мастер импорта SSDT для извлечения из базы данных схемы исходного кода проекта и очистки решения.

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

...