Условная логика в сценариях миграции с использованием ReadyRoll
У меня есть проект, который использует ReadyRoll и сценарий с заголовком миграции, который использует условие для запуска сценария или не на основе переменной, определенной в разделе переменных SQLCMD свойств проекта ($(Environment).
-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" Condition="'$(Environment)' = 'DEV'" />
<some sql scripts here>
Когда я развертываю этот проект на чистом экземпляре сервера sql, независимо от среды, в которой я его указываю, он все равно развертывает этот скрипт.
Я хотел бы знать, как я могу запустить скрипт на основе условия с ReadyRoll. Сценарий в настоящее время находится в папке Migrations... Я не уверен, что может потребоваться переместить его или нет.
Я посмотрел эти ссылки до сих пор, но они не помогли:
2 ответа
Я смог заставить это работать, добавив оператор if над SQL, который я хотел запустить, который отражает защиту, указанную тегом миграции.
Окончательный фрагмент кода выглядит следующим образом:
-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" />
if '$(Environment)' = 'DEV'
BEGIN
<some sql scripts here>
END
Этот подход прекрасно работает для развертывания Octopus:
-- <Migration ID="bf593e36-5883-4fff-9c6d-223f7449fccf" Condition="'$(Environment)' = 'DEV'" />
Единственное, что вам нужно создать переменную с тем же именем "Environment" в вашем проекте ReadyRoll (переменные SQLCMD) и в Octopus. И назначьте отдельные значения (DEV, TEST, PROD и т. Д.) Для каждой среды.