Ответ 1
Я, наконец, решил это. Полный план решения можно найти на http://benpowell.org/deploying-database-migrations-in-net-using-fluentmigrator-teamcity-and-octopus-deploy/.
Я подвел итоги блога ниже. Большинство моих проблем связано с недостаточным пониманием FluentMigrator. Я выберу свои оригинальные вопросы один за другим.
Каков правильный способ импорта существующей схемы базы данных?
Я не мог найти "правильный путь", но я мог найти способ, который сработал у меня! Я принял следующие основные решения:
- я запустил всю базу данных в качестве базовой линии. Я включил все таблицы, procs, ограничения, представления, индексы и т.д. Я настраиваю свою первую итерацию как базовую. Я выбрал вариант CREATE без DROP. Это будет моя миграция.
- Я запускал тот же самый script дамп, но выбирал только DROP. Это будет моя миграция вниз.
Миграция базовой линии просто должна использовать метод EmbeddedScript
для выполнения прикрепленного script (я также организую сценарии в итерационных папках).
[Tags(Environments.DEV, Environments.TIERS, Environments.CI, Environments.TEST)]
[Migration(201403061552)]
public class Baseline : Migration
{
public override void Up()
{
this.Execute.EmbeddedScript("BaselineUp.sql");
}
public override void Down()
{
this.Execute.EmbeddedScript("BaselineDown.sql");
}
}
Исходный уровень решен...
Как работать с .NetTiers
Хорошо, это было несколько сложной задачей. Я создал конкретную базу данных .NetTiers, которую я бы использовал для запуска генерации кода .NetTiers. В FluentMigrator вы можете "пометить" миграции. Я решил пометить на основе среды. Следовательно, у меня есть тег 'tiers', а также теги для 'dev', 'test', 'uat', 'prod' и т.д. Как это произойдет, последует позже.
При изменении схемы я создаю миграцию и использую теги 'tiers', чтобы сфокусироваться на изменении схемы .NetTiers. Затем я запускаю migrate.exe из внешние инструменты Visual Studio используя этот тег как флаг. Соединение с базой данных app.config, которое соответствует имени моей машины, будет использоваться для подключения к базе данных, поэтому я указываю его в базе данных уровней. Теперь моя миграция запустила мою исходную базу данных .NetTiers. Теперь я могу запустить инструмент генерации кода .NetTiers Codesmith для создания новых DLL.
.NetTiers решили...
Каков правильный способ развертывания миграции в рабочей среде?
Я использую Octopus Deploy и, честно говоря, если вы развертываете .NET-приложения, особенно на нескольких серверах, это должен быть ваш абсолютный инструмент для этого!
Я не буду вдаваться в подробности Octopus Deploy, но на базовом уровне вы можете объединить TeamCity и Octopus. OD предоставляет два предмета, чтобы вы могли двигаться.
- Программа под названием Octopack, которая завершает ваше приложение как пакет NuGet.
- Плагин TeamCity, который позволяет TeamCity создавать пакет NuGet и предлагать его как артефакт, открытый в канале NuGet.
Octopus Deploy затем потребляет этот канал NuGet и может развернуть эти пакеты на конечных серверах. В части этого процесса развертывания работает PreDeploy и PostDeploy Powershell script. Здесь я собираюсь запустить приложение migrate.exe с моими конкретными тегами.
Развертывание решено...