Структура проекта TFS 2010 и лучшее из него - PullRequest
3 голосов
/ 13 декабря 2011

Мы недавно решили перейти на TFS 2010. Мы также хотели бы улучшить нашу систему контроля версий и структуру проектов.

вот структура, о которой договорилась команда:

 |OurCompanyName (or common root name)
 |
 +--Windows
 +----Applications
 +------App1
 +------App2
 +----Services
 +------WindowsService1
 +------WindowsService2
 |
 +--Web
 +----Applications
 +------WebApp1
 +------WebApp2
 +----Services
 +------WebService1
 +------WebService2
 |
 +--Common
 +----ThirdParty
 +----Libs
 +------DataAccessLib
 +------BusinessLogicLib
 |
 +--Tests
 +----TestProject1
 +----TestProject1

Общая папка содержит сторонние и наши собственные библиотеки, которые используются повсеместно (App1, App2, WebApp1 ...etc)

Нам нужно получить следующее:

  • Версии релиза должны зависеть от последней производственной версии Lib.
  • Если тесты не пройдены, зависимые проекты не должны 't build и team должны быть уведомлены.
  • простое ветвление: разработка, производство, версии версий и то, как мы можем их соответствующим образом структурировать.

Я уже прочитал следующее руководство Руководство по ветвлению в Visual Studio TFS 2010 , но оно касается только бита ветвления.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2012

Пользуясь TFS некоторое время, я хотел бы предостеречь: Вы смотрите на вещи со стороны разработчика, как мы это делали, когда начинали думать о том, как лучше развернуть проекты. Однако вы также должны принять во внимание требования к управлению проектами.

Наличие разных проектов TFS означает разные данные отчетности для менеджера.

Таким образом, если App1 и WebApp1 предназначены для человека, который управляет вашими проектами в рамках одного и того же общего проекта, то, если они у вас есть в разных проектах TFS, вопросы в форме: «Сколько часов моя команда потратила на этот проект» будет сложно ответить. Я бы серьезно занялся этим вопросом, прежде чем принимать решение о структуре проекта.

Теперь по вашим вопросам:

  • Версии выпуска должны зависеть от последней производственной версии Libs

Как упоминает Бетти (выше), это не очень хорошая практика. Что произойдет, если разработка произошла с производственным выпуском Lib v1.0 и когда-нибудь во время стабилизации Lib изменился на v2.0?

  • если тесты не пройдены, зависимые проекты не должны создаваться и команда должна быть уведомлена.

Я полагаю, что это вопрос вашего сценария сборки, а не вашего макета

- простое ветвление

Мы пытаемся реализовать простой подход на основе MAIN-линии, когда у нас есть одна или несколько веток разработки (зависит от ваших конкретных требований). Время от времени, когда код dev считается «стабильным», то есть прошел базовые модульные тесты, он добавляется в строку MAIN. Разработчики продолжают в своих ветвях разработки, тогда как код в линии MAIN проходит более обширное тестирование. Об обнаруженных ошибках сообщают и первоначально исправляют в ветвях DEV и возвращают в основную линию. Как только код в строке MAIN достаточно хорош, стабилизация начинается в ветви RELEASE. После этого исправления происходят в ветке RELEASE и возвращаются в ОСНОВНУЮ строку. Обратите внимание, что «стабильный», «достаточно хороший» - это ценности, которые имеют разные значения для организаций.

0 голосов
/ 03 марта 2012

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

  • Релизные версии должны зависеть от последней производственной версии Libs.

Релизная версия должна зависеть от того, что она использовалав то время как это развивалось.Не то, что текущая версия.Возможно, вы захотите углубиться в то, что это требование и почему вы думаете, что оно вам нужно.

  • если тесты не пройдены, зависимые проекты не должны быть собраны, а команда должна быть уведомлена.

TFS не поддерживает связывание сборок из коробки, вы можете изменить шаблон сборки, чтобы добавить поддержку, но это не особо чистое решение (imo).

Вы можете самостоятельно подписаться на ошибкустроит с использованием встроенных подписок на tfs alerts, однако каждый разработчик должен сделать это.(Если вы не подпишетесь на почтовую группу или не создадите пользовательскую почтовую программу).

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

  • простое ветвление: разработка, производство, версии с версиями и способы их структурированиясоответственно.

Это звучит как простое ветвление каждый раз, когда вы делаете релиз, что очень просто.

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

Другие примечания

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

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

...