Управление различными профилями публикации для каждого разработчика в SSDT

В нашем текущем dev. рабочего процесса есть основная база данных --> DbMain. Есть процесс, который берет последнюю версию проекта и автоматически развертывает ее там, после чего запускает модульные тесты. Так как хотелось бы, чтобы в исходном контроле всегда была рабочая версия проекта, каждый разработчик должен быть уверен, что он проверяет рабочий код и все тесты будут пройдены.

Для этого мы решили создать отдельные базы данных для каждого разработчика со следующим соглашением об именах --> DbMain_XX (где XX< /strong> — инициалы разработчиков). Таким образом, каждый разработчик перед регистрацией должен опубликовать все изменения в этой базе данных вручную и запустить модульные тесты. Для этой цели полезно настроить конфигурацию публикации, которая является копией основной конфигурации публикации с единственной разницей в именах баз данных.

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

Если мы не добавим эти профили в систему управления версиями, то файл .sqlproj по-прежнему будет иметь ссылку на эти файлы, поэтому проект будет иметь ссылку на несуществующие файлы.

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

ОБНОВИТЬ:

Согласно комментариям Питера Шотта:

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

Запуск тестов локально имеет как минимум 2 недостатка. Во-первых, предполагается, что каждый должен установить SQL Server локально. В основном мы работаем через виртуальные машины, и дисковое пространство там весьма ограничено. Другое дело, что разработчики точно забудут или не будут каждый раз запускать тесты вручную. Иногда они вносят изменения в репозиторий, не создавая его и/или не запуская тесты. Мы хотели бы избежать подобных ситуаций и как можно быстрее «отловить» неудачную сборку.

Другой подход, о котором упоминалось, заключается в том, чтобы иметь 1 общую базу данных сборки. И в моем случае у нас есть один (DbMain). Все разработчики могут использовать его для своих нужд, но мы обязательно поймаем ситуацию, когда 2 разработчика будут публиковать одновременно, и это может внести много путаницы, выяснив, что на самом деле пошло не так.


person Dmitrij Kultasev    schedule 01.09.2017    source источник
comment
Вы определенно можете создавать профили публикации локально, чтобы не сломать проект, но имеет ли смысл собирать локально и запускать там тесты или иметь общую базу данных сборки с регистрацией/фиксацией, которая нарушила сборку, поднимите флаг, а не создайте одну БД на человек? (Не делайте это БД, которая содержит важные данные - просто что-то, что строится или нет, возможно, сначала с тестовыми данными.)   -  person Peter Schott    schedule 02.09.2017
comment
@PeterSchott Я обновил вопрос   -  person Dmitrij Kultasev    schedule 04.09.2017


Ответы (1)


Обычный подход к такого рода вещам — не только для профилей публикации SSDT, но и для файлов конфигурации в целом — заключается в том, чтобы зафиксировать общую версию файла с именем, например, DbMain.publish.xml.template, и предоставить разработчику инструкции по переименованию файла в DbMain.publish.xml. - или что-то еще - и .gitignore эту локальную копию файла, позволяющую разработчикам вносить любые изменения, которые они хотят, но наследовать общие настройки из .template версии файла.

Профили публикации не нужно добавлять в .sqlproj для использования во время развертывания, это просто удобство в Visual Studio, упрощающее их поиск и редактирование, поэтому вам не нужно беспокоиться о неработающих ссылках.

Вы правы, желая избежать публикации нескольких разработчиков в общей базе данных «сборки», это рецепт разочарования.

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

person Gavin Campbell    schedule 05.09.2017
comment
В настоящее время я сделал аналогичным образом, но за исключением того, что я отправил общую версию файла конфигурации, и тогда каждый разработчик должен сказать git, чтобы он не отслеживал изменения для этого файла. - person Dmitrij Kultasev; 05.09.2017
comment
Да, так что вы уже на правильном пути. Если единственная проблема, которая у вас сейчас есть, это неработающие ссылки в файле .sqlproj, то все, что вам нужно сделать, это сказать разработчикам, чтобы они не добавляли свои локальные файлы конфигурации в проект. - person Gavin Campbell; 05.09.2017
comment
в конфиге нет сломанной ссылки, так как я отправил его в git, и тогда все должны сказать, чтобы не отслеживать локальные изменения. Это почти то же самое, что вы предлагаете, разница в том, что вы не пушите этот конфиг в гит - person Dmitrij Kultasev; 05.09.2017
comment
Итак, если единственная проблема заключается в том, что sqlproj содержит ссылки на отсутствующие файлы, этого можно избежать, не добавляя отдельные профили публикации в проект. - person Gavin Campbell; 05.09.2017