Параллельная разработка функций с помощью инструмента развертывания базы данных

Я ищу конкретную стратегию / соглашение, которое работает для параллельной разработки с ветвями Feature и инструментом развертывания базы данных, таким как DbUp, DbDeploy, ReadyRoll и т. Д.

Мы запускаем несколько веток функций для одновременной разработки проекта.

Каждая ветвь имеет отдельную среду разработки, QA и UAT, которая разворачивается через Octopus deploy.

Я пытаюсь решить проблему автоматического развертывания базы данных с помощью Octopus, используя инструмент, который будет обрабатывать изменения, применяемые в каждой из ветвей.

Изменения базы данных будут происходить во всех ветвях (включая ветку релиза).

Большинство инструментов, которые я видел до сих пор, используют последовательный подход сценариев, которые проверяются в VCS и развертываются инструментом. Инструмент по большей части применяет скрипт в порядке возрастания имени файла, и большинство из тех, что я видел, указывают на использование подхода 1, 2, 3 и т. Д.

Это прекрасно работает для одной ветви.

Моя проблема будет в том, что у функции А есть 1, а у функции Б - 1 - оба сливаются в основную ветку. Теперь у меня есть два сценария № 1. Чтобы сделать его еще более увлекательным - наш путь к производству - это объединение еще раз, у которого также может быть 1. Итак, теперь у нас есть сценарии 3 #1.

Существует также проблема обратного слияния. После завершения проекта - объедините ветвь релиза с основной, а затем снова с ветвью функций, чтобы сбросить ее для следующего проекта. В этом сценарии у меня есть два дополнительных сценария # 1, которые не были применены к базе данных ветвей целевой функции.

Мое первоначальное решение - использовать юлианскую дату в качестве ведущего префикса для имен файлов sql, которые проверяются в исходном коде. Я также думал о применении к файлу имени ветви вместе с рабочим элементом. Таким образом, файл sql будет следовать соглашению {XXXXX_Y_ZZZZZZ.sql}, где xxxxx - юлианская дата, y - ветвь, а zzzzzz - рабочий элемент из TFS.

Я ищу конкретное решение этой проблемы. Кто-нибудь еще решил это? Что ты сделал? Какие недостатки? Какие инструменты вы использовали?

1 ответ

Вы смотрели на семантическую версию Readyroll?

Мы внедряем Readyroll сейчас, мы - небольшая команда, в которой легко общаться и ограничивать изменения между ветвями функций.

Мы интегрируемся в ветку разработки и на раннем этапе выявляем конфликтующие изменения и, при необходимости, переписываем более ранние сценарии миграции (для этого требуется базовая версия проекта базы данных, к которой вы можете вернуться)

На веб-сайте Redgate есть еще немного информации о работе с ветками, но она не совсем подходит для вашего сценария, переключите ветки с помощью Readyroll.

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

Мне очень любопытно, чем вы в конечном итоге!

Другие вопросы по тегам