Как организовать жизненный цикл разработки с помощью TFVC

#azure-devops #branching-and-merging #tfvc #azure-repos

#azure-devops #ветвление и слияние #tfvc #azure-репозитории

Вопрос:

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

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

Я просмотрел ветви TFS, но они, похоже, путают пути и затрудняют настройку и работу, и я чувствую, что они на самом деле не для такой ситуации.

Как люди обычно решают эту проблему?

(Я ценю, что многие люди будут утверждать, что Git — лучшая система управления версиями, но я конкретно спрашиваю, как это сделать с помощью TFVC)

Ответ №1:

Ветви в TFVC далеко не легкие и могут затруднять переключение между ветвями локально.

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

Здесь можно использовать еще один вариант git tfs , он позволит вам использовать TFVC на сервере, но Git локально и получать локальные преимущества (включая несколько локальных филиалов и возможность переключения между ними на месте).

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

  Development
 — Test
       — Acceptance
             — Production
  

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

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

Альтернативой является использование ветвей выпуска, в основном немного сворачивающих вышеупомянутую структуру:

  Main
 — Release 1
 — Release 2
  

Активная разработка происходит в Main, код объединяется и исправляется в ветвях выпуска. Все изменения, внесенные в ветку выпуска, также должны быть объединены обратно.

Есть лучшее решение

Вместо того, чтобы пытаться быть более продуктивным, работая над новыми функциями, можете ли вы помочь клиенту быстрее протестировать потенциальные версии? В этом случае вам не нужно будет слишком долго ждать завершения тестирования, вы сможете быстро исправить ошибки, а затем переключить внимание на новые разработки. Это предотвратит всевозможные проблемы со слиянием, повторное появление ошибок в коде, который не был правильно объединен с main и т.д.

Комментарии:

1. В прошлом смотрители ALM создали руководство по ветвлению для TFVC. Вероятно, вы можете где-нибудь найти копию. Мы изменили руководство, чтобы следовать последнему совету в моем ответе, попробуйте устранить проблему, из-за которой у вас возникают долговременные ветви.

2. У меня было ощущение, что кто-то собирается упомянуть Git. Мне это никогда не нравилось в прошлом, когда я его использовал, и есть сложности, связанные с тем, что у нас есть около 20 разных проектов DevOps для разных клиентов, большинство из которых используют общий проект DevOps для нашего общего кода, поэтому переход на Git был бы довольно сложной задачей. К сожалению, у клиента ограниченное время для тестирования, и у нас нет бизнес-знаний, чтобы быть уверенными, что все работает правильно. Вам нужно обновить связанные проекты, чтобы использовать git tfs? Когда вы говорите локально, это работает только для 1 программиста?

3. Каждый программист может проверять ветви TFS и свободно переключаться локально. Сервер останется в неведении.

4. Но общие проекты или общий код за пределами ваших филиалов могут вызвать проблемы. Можете ли вы разорвать зависимости, используя пакеты общего кода nuget?

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