Миграция с удаленной TFS 2015 на Azure Devops (частное облако)

Моя текущая организация имеет требование перенести исходный код + ссылки истории из поставщика TFS 2015, который находится на удаленном сайте, в наши Azure Devops (Repos). Проблема, с которой я столкнулся, заключается в том, что, поскольку исходная файловая система TFS находится на удаленном сайте и не подключена нашим AD, не удалось найти способ связать ее. В настоящее время мы используем явный вход в их tfs и получаем код. Есть ли какой-либо способ перенести то же самое и выполнять синхронизацию ежедневно в течение нескольких месяцев и отключить зависимость от удаленного.

Любая помощь приветствуется..


person Renji    schedule 26.08.2019    source источник


Ответы (1)


Не уверен, что упомянутый вами Azure DevOps (Repos) - это служба Azure DevOps (предыдущая версия VSTS) или Azure DevOps Server 2019 (предыдущая версия TFS). В вашем случае, похоже, вы просто хотите выполнить синхронизацию исходного кода между TFS2015 и службой Azure DevOps или Azure DevOps. сервер.

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

  • Вариант 1. Скопируйте наиболее важные активы вручную
  • Вариант 2: миграция базы данных с высокой точностью
  • Вариант 3. Использование общедоступных инструментов на основе API для более точной миграции

Только вариант 2 будет включать историю управления версиями во время миграции. Но у него также есть некоторые ограничения, такие как версия, поддерживаемая инструментом импорта. В настоящее время для импорта поддерживаются только следующие версии Azure DevOps Server: Azure DevOps Server 2019 и Azure DevOps Server 2019.0.1.

В вашем сценарии вы можете использовать сборку CI в TFS2015 для автоматической синхронизации репозитория Azure DevOps. И самая большая проблема здесь - это аутентификация как для TFS, так и для службы Azure DevOps. Так же, как вы упомянули, использование явных логинов и сценария PowerShell должно работать.

Образец для справки:

1. Создайте сборку CI в TFS 2015.

В вашем проекте TFS 2015, где размещено репозиторий git - ›создать определение сборки с репозиторием TFS 2015 git в качестве репозитория -› включить CI со всеми включенными ветвями.

введите описание изображения здесь

2. Добавьте задачу PowerShell для синхронизации репозитория Git TFS2015 со службой Azure DevOps. Добавьте задачу PowerShell в определение сборки с помощью следующего сценария:

if ( $(git remote) -contains 'vsts' )
{
    git remote rm vsts 2>&1|Write-Host
    echo 'VSTS Account removed'
}


git remote add vsts https://Personal%20Access%20Token:{PAT}@{account}.visualstudio.com/{project}/_git/{repo}

git checkout ${env:BUILD_SOURCEBRANCHNAME} 2>&1|Write-Host
git reset --hard origin/master 2>&1|Write-Host
echo 'update local branch with remote successfully'
git push  vsts ${env:BUILD_SOURCEBRANCHNAME} -f 2>&1|Write-Host

Примечание. пульт vsts должен быть добавлен с учетными данными. И он использует PAT для аутентификации в URL-адресе репозитория git службы Azure DevOps. И вам просто нужно заменить реальный PAT, имя учетной записи, имя проекта и имя ответа в URL https://Personal%20Access%20Token:{PAT}@marinaliu.visualstudio.com/{project}/_git/{repo}.

Сохраните определение сборки, и теперь, когда какие-либо ветки обновляются в репозитории Git TFS 2015, репозиторий git VSTS будет автоматически синхронизироваться для соответствующих веток.

person PatrickLu-MSFT    schedule 27.08.2019
comment
Спасибо Патрику за вклад. К сожалению, это служба Azure Devops, и мы находимся в частном облаке. Проблема в том, что у нас не может быть взаимного доверенного соединения по соображениям безопасности. Итак, прямо сейчас я думаю о том, чтобы получить исходный код с удаленного сайта, используя явные входы на локальный сервер сборки, и отправить загруженный код в репозитории Azure, используя конвейеры Azure. Это как бы косвенно и неэффективно, и требует больше сценариев PowerShell. - person Renji; 27.08.2019
comment
Renji, извините за недоразумение. Обновили свой ответ. В вашем случае вы можете использовать сборку CI в TFS2015 для автоматической синхронизации репозитория Azure DevOps. Но эта операция не сохранит историю в TFS. И самая большая проблема здесь - это аутентификация как для TFS, так и для службы Azure DevOps. Так же, как вы упомянули, использование явных логинов и сценария PowerShell должно работать. - person PatrickLu-MSFT; 28.08.2019
comment
Спасибо, Патрик. К сожалению, источник tfs удаленного поставщика находится в TFVC, а не в git. Есть ли способ иметь однозначное сопоставление в одном и том же формате vc. - person Renji; 29.08.2019
comment
@Renji К сожалению, эта функциональность недоступна в TFVC, но последние версии TFS могут импортировать вашу основную ветку с историей в Git в кратчайшие сроки. Оттуда не так много работы (относительно), чтобы произвести технический переход. Уловка заключается в том, чтобы импортировать вашу основную ветвь в Git на стороне TFS, а затем использовать зеркальное руководство для клонирования вашего репо в VSTS без необходимости импортировать сервер onprem в VSTS. Взгляните на этот аналогичный вопрос здесь: stackoverflow.com/questions/48116442/ - person PatrickLu-MSFT; 29.08.2019
comment
@Renji Для TFS 2015 вы можете использовать сторонний мост, например git-tfs. Если вы не хотите скрывать GIT и продолжать работу в TFVC. Вы можете использовать клиентский API для создания рабочего пространства и загрузки изменений из TFS. Скопируйте и создайте новое рабочее пространство, затем установите сопоставление с удаленным VSTS. Отметьте ожидающие изменения. Это немного сложно, но это тоже возможно, и это хорошо задокументировано в некоторых блогах через Google. - person PatrickLu-MSFT; 29.08.2019
comment
Большое спасибо за вклад, Патрик. Попробую это решение. - person Renji; 30.08.2019