Есть несколько способов добиться этого, первый подход — проверить среду в сценарии после развертывания, например..
if @@servername = 'dev_server'
begin
insert data here
end
Несколько более чистая версия состоит в том, чтобы иметь разные файлы сценариев для каждой среды и импортировать их с помощью сценария :r import sqlcmd, чтобы вы могли:
- PostDeploy.sql
- DevServer.sql
- QAServer.sql
потом
if @@servername = 'dev_server'
begin
:r DevServer.sql
end
if @@servername = 'qa_server'
begin
:r QAServer.sql
end
Вам нужно будет убедиться, что пути к файлам .sql указаны правильно, и вы скопируете их с помощью dacpac.
Вам не нужно использовать @@servername, вы можете использовать переменные sqlcmd и передавать их для каждой среды, что опять же немного чище, чем жестко закодированные имена серверов.
Второй подход заключается в том, чтобы настроить dacpac, чтобы изменить сценарий post delpoy на сценарий, специфичный для вашей среды, это мой предпочтительный вариант, который лучше всего работает как часть сборки CI, мой процесс таков:
- Изменения при регистрации
- Сервер сборки создает dacpac
- Сборка берет dacpac, копирует в папки env dev, qa, prod и т. д.
- Сборка заменяет сценарий после развертывания в каждом сценарии, специфичном для env.
Я вызываю сценарии PostDeploy.dev.sql, PostDeploy.Qa.sql и т. д. и устанавливаю для действия "Сборка" значение "Нет" или они добавляются как "Скрипт, не в сборке".
Чтобы заменить сценарий после развертывания, вам просто нужно использовать API упаковки .net или для некоторых примеров взгляните на мою демонстрацию Dir2Dac, которая делает это и многое другое:
https://github.com/GoEddie/Dir2Dac
более конкретно:
https://github.com/GoEddie/Dir2Dac/blob/master/src/Dir2Dac/DacCreator.cs
var part = package.CreatePart(new Uri("/postdeploy.sql", UriKind.Relative), "text/plain");
using (var reader = new StreamReader(_postDeployScript))
{
reader.BaseStream.CopyTo(part.GetStream(FileMode.OpenOrCreate, FileAccess.ReadWrite));
}
person
Ed Elliott
schedule
16.11.2015