3

Что мы используем:Как я могу добиться непрерывной интеграции и развертывания для многих проектов в одном решении?

Мы используем ртутные и Bitbucket для хранилищ. Appveyor и kudu для непрерывной интеграции и развертывания. Мы используем визуальную студию 2015 как IDE.

Что мы имеем:

У нас есть различные интернет-проекты. Они делят некоторые другие проекты. Все веб-проекты имеют собственное решение. Каждое решение имеет свой собственный репозиторий.

Если есть изменения в развитии ветки. Appveyor создает этот репозиторий, тестирует и развертывает его.

Если изменения по умолчанию, kudu создает этот репозиторий и развертывает его.

Что мы хотим:

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

Если я что-то меняю на webproject1, я просто хочу построить и развернуть webproject1. Другие веб-проекты в решении не должны строиться и развертываться.

+1

Кажется, что вам действительно не нужно 1 решение. Вы хотите, чтобы все проекты открывались в одном экземпляре визуальной студии?Это причина, по которой вам нужно одно решение? –

+0

Это связано с разработкой (отладка, зависимость, nuget и т. Д.) –

ответ

0

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

У каждого приложения все еще может быть свой собственный файл решения, и ваша установка CI также остается такой, какая есть. Какие изменения заключаются в том, что к общим проектам, которые у вас есть во всех приложениях, будет относиться относительный путь. Например .:

Repository root\Core\Component1\Component1.csproj Repository root\Core\Component2\Component2.csproj Repository root\Applications\App1\App1.sln Repository root\Applications\App1\Domain\Domain.csproj Repository root\Applications\App1\Web\Web.csproj Repository root\Applications\App2\App2.sln Repository root\Applications\App2\Domain\Domain.csproj Repository root\Applications\App2\Web\Web.csproj

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

Ваша система непрерывной интеграции будет иметь триггеры VCS, которые будут наблюдать за приложением и зависимостями, поэтому только соответствующие изменения запускают сборку. Итак, если разработчик App1 вносит изменения в Component1, а Component1 также используется App2, сервер сборки будет запускать сборку в App1 и App2, сигнализируя о любых нарушениях. Однако, если App2 не зависит от Component1, тогда будет создан только App1. Это достигается путем настройки триггеров сборки для ваших приложений.

Одним из преимуществ этой стратегии против имеющей один .sln, что вам не придется строить все каждый раз, когда вы строите решение (и не настраивать, какие проекты строить каждый раз, когда вы работаете на другое приложение)

Также обратите внимание, что вы можете добиться этого с помощью нескольких репозиториев. Но это означает, что вам нужно будет проверить их в правильном месте, чтобы ваши относительные пути работали. Это также довольно неясно, так как если вы проверите App1 и попытаетесь его построить. Это просто не сработает, и вам нужно будет выяснить, какие другие репо, чтобы проверить и т. Д.

Вы используете Mercurial, но FYI, способ (один из) будет обрабатываться с Git с помощью submodules.

+0

Вы можете задать вопрос, есть ли у вас вопросы. Помог бы вам этот подход? –

Смежные вопросы