Параллельная разработка функций с помощью инструмента развертывания базы данных
Я ищу конкретную стратегию / соглашение, которое работает для параллельной разработки с ветвями 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.
Изучая инструменты, я в основном пришел к выводу, что это выбор между подходом, основанным на состоянии, или подходом, основанным на миграции. Мне нравится готовый подход, который предлагает смесь.
Мне очень любопытно, чем вы в конечном итоге!