Когда дело доходит до развертывания изменений базы данных в SQL Server, использование SQL Server Data Tools (SSDT) может значительно упростить процесс. Одна из мощных функций SSDT – это возможность включения предварительных и пост-скриптов, которые выполняются перед и после развертывания базы данных.
Процесс развертывания с использованием SSDT обычно включает следующие шаги:
- sqlpackage.exe сравнивает проект базы данных (dacpac) с целевой базой данных
- sqlpackage.exe генерирует скрипт развертывания на основе сравнения
- sqlpackage.exe выполняет предварительный скрипт
- sqlpackage.exe выполняет скрипт развертывания
- sqlpackage.exe выполняет пост-скрипт
Этот процесс остается неизменным, независимо от того, используете ли вы sqlpackage.exe для непосредственного развертывания изменений или генерации скрипта для последующего развертывания.
Однако есть ситуации, когда вы можете захотеть, чтобы предварительный скрипт выполнялся перед шагом сравнения. Это может быть полезно, если предварительный скрипт содержит действия, которые должны выполняться только во время процесса развертывания. К сожалению, SSDT не предоставляет встроенной опции для предварительного скрипта перед сравнением, так как это может привести к путанице или потенциальным ошибкам развертывания.
Чтобы преодолеть это ограничение, рекомендуется создать пользовательские предварительные и пост-скрипты sqlpackage.exe. Таким образом, процесс непрерывной интеграции (CI) будет выглядеть следующим образом:
- Сборка CI выполняет предварительный скрипт pre-sqlpackage.exe
- sqlpackage.exe сравнивает проект базы данных с целевой базой данных
- sqlpackage.exe генерирует скрипт развертывания
- sqlpackage.exe выполняет предварительный скрипт
- sqlpackage.exe выполняет скрипт развертывания
- sqlpackage.exe выполняет пост-скрипт
- Сборка CI выполняет пост-скрипт post-sqlpackage.exe
Следуя этому подходу, у вас есть полный контроль над тем, когда выполняется каждый скрипт и в каких обстоятельствах. Это гарантирует, что скрипты выполняются в нужное время и избегает возможных проблем с развертыванием, особенно при работе с зеркальными копиями баз данных производства.
Чтобы включить эти пользовательские скрипты в ваш проект SSDT, вы можете включить их в проект и установить “Build Action” в значение “none”. Кроме того, установите свойство “Copy to Output Directory” в значение “Copy Always” или “Copy if Newer”. Это гарантирует, что скрипты не будут включены в dacpac, но будут доступны в выходном каталоге вместе с файлом dacpac. Затем вы можете переместить файлы вместе и выполнить их с помощью sqlpackage.exe или любого другого выбранного вами инструмента.
Хотя технически возможно включить скрипты непосредственно в dacpac с использованием .NET packaging API, может быть сложно извлечь их с помощью встроенных инструментов. Также неясно, будет ли sqlpackage.exe правильно обрабатывать дополнительные файлы в dacpac.
Используя предварительные и пост-скрипты в развертывании SQL Server, вы можете улучшить гибкость и контроль над процессом развертывания. Этот подход позволяет выполнять пользовательские действия в определенные моменты развертывания, обеспечивая гладкое и надежное развертывание.
Теги: Sql Server, CI, SSDT