При каких обстоятельствах VSTS автоматически создает новый каталог репозитория для существующего каталога репозитория?

У меня есть репо под моей учетной записью VSTS почти более 6 месяцев. Я использую частного агента для его создания. До вчерашнего дня он использовал путь C:\agent\_work\13 при создании репо. С сегодняшнего дня он внезапно создал новый каталог в C:\agent\_work\201 и попытался собрать проект. Что может быть причиной этого?

Вот как моя текущая структура каталогов выглядит на частном агенте.

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

Исходные корневые сопоставления: введите здесь описание изображения

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

Дайте мне знать, если кто-нибудь знает, как решить эту проблему.


person tRuEsatm    schedule 22.05.2018    source источник


Ответы (3)


Это не проблема, нет ничего неправильного или нужного «исправить».

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

Вы не должны полагаться на то, что сборка заканчивается в каком-либо конкретном месте. Если вы в настоящее время делаете это, вы делаете неверное предположение и должны начать использовать встроенные переменные (например, $(Build.SourcesDirectory)), которые позволяют вам прозрачно ссылаться на рабочую папку сборки.

person Daniel Mann    schedule 22.05.2018
comment
Но на сегодняшний день 6 репозиториев были обновлены до нового номера папки. И я не обновлял для него определение сборки. - person tRuEsatm; 22.05.2018
comment
Каким-то образом каждому проекту присваивается новый номер без каких-либо изменений в определении сборки. Что может быть причиной этого? - person tRuEsatm; 23.05.2018

В рабочей папке есть папка SourceRootMapping, а в этой папке есть файлы Mappings.json и SourceFolder.json (SourceRootMapping{guid} folder{build definition id} folder\sourceFolder.json).

Итак, проверьте lastBuildFolderNumber в файле Mappings.json и SourceFolder.json на наличие существующего сопоставления.

Вы можете очистить папку _work.

Связанная тема: Увеличение в каталоге _work

person starian chen-MSFT    schedule 22.05.2018
comment
Но мой вопрос: почему он вдруг изменился? Я не менял определение сборки ни для одного из репозиториев, а также не удалял и не клонировал какое-либо определение сборки. - person tRuEsatm; 22.05.2018
comment
Также могу ли я вернуться к старому отображению? - person tRuEsatm; 22.05.2018
comment
@Sameer Это не меняется внезапно, судя по снимку экрана, папок 190 197, поэтому число увеличивается правильно. Вы можете проверить значение lastBuildFolderNumber в Mappings.json. Причина использования 13 в качестве имени папки заключается в том, что есть сопоставление с этой папкой, вы можете проверить sourceFolder.json. Чтобы решить эту проблему, вы можете очистить папку _work. - person starian chen-MSFT; 23.05.2018
comment
Ой, извините, я думаю, вы неправильно меня истолковали. У меня 197 проектов в VSTS; Они у меня с октября 2017 года. Вчера вдруг для старых проектов были созданы новые каталоги. Аналогично каталогу 13 создан каталог 201, для каталога 24 создано 198. Они содержат одинаковые репозитории. Кроме того, я не мог получить доступ к URL-адресу VSTS после очистки папки _work. Слава богу, у меня была резервная копия папки, поэтому я мог вставить содержимое, узнав, что очистка _work не работает. - person tRuEsatm; 23.05.2018
comment
@Sameer Он основан на определении сборки, а не на репозиториях. Папку можно удалить, но маппинг останется. Каково содержимое sourceFolder.json? Имеются ли записи, относящиеся к 13 201? - person starian chen-MSFT; 23.05.2018
comment
Ну, Mappings.json говорит { "lastBuildFolderCreatedOn": "05/22/2018 16:43:10 -07:00", "lastBuildFolderNumber": 205 } - person tRuEsatm; 23.05.2018
comment
Я обновил вопрос папками сопоставления Source Root. - person tRuEsatm; 23.05.2018
comment
Я случайным образом собрал проект, который никто не трогал в течение почти 4 месяцев с определением сборки как есть, но для репозитория был создан новый номер каталога 207. Почему? - person tRuEsatm; 24.05.2018
comment
Он проверяет сопоставление в sourceFolder.json, затем создает новую папку на основе lastBuildFolderNumber+1, но должно создать 206. Я рекомендую очистить папку _work, а затем повторить попытку, чтобы проверить, сохраняется ли проблема. (название папки будет 1, 2, 3) - person starian chen-MSFT; 24.05.2018
comment
Если я очистю папку _work, отображение вернется к старому или начнется с 1? - person tRuEsatm; 30.05.2018
comment
Начните с 1. Вы можете попробовать изменить файлы Mappings.json и SourceFolder.json. - person starian chen-MSFT; 31.05.2018

Я знаю, что это старый вопрос, но я был разочарован тем же и немного покопался в первопричине.

ЛЮБОЕ изменение URL-адреса репо, по-видимому, создает новую рабочую папку. Если имя репозитория, имя проекта или имя организации/коллекции изменяется, изменится URL-адрес репозитория, который затем порождает новый SourceFolder.json для этого определения/конвейера сборки в папке SourceRootMapping. Используется последний файл SourceFolder.json.

Вы можете проверить папку SourceRootMapping и попытаться найти папку definitionId рабочей папки, которая была заменена более новой. Если у вас есть несколько папок в этом каталоге definitionId, проверьте файлы SourceFolder.json внутри них и посмотрите, что изменилось, какие изменения привели к созданию и использованию новой папки.

Пример. Мой каталог D:\ADO-Terraform\_work\SourceRootMapping\542dccee-a265-44db-bae0-9b3f48d21793\1837, где 1837 является definitionID (не совпадает с номером рабочей папки), содержит 4 папки с именами hashKey под ним. У меня был 1, который был моим оригиналом, затем 1, когда я изменил используемое репо, затем 1, когда я переименовал используемое репо, затем 1, когда я переименовал проект, в котором была эта работа.

К сожалению, я не думаю, что есть способ исправить это, чтобы использовать старую папку. Но, как сказал кто-то другой, вы можете очистить рабочую папку от всех папок, помеченных определением сборки (1-201 в вашем примере), а затем сбросить/очистить файл mappings.json, что должно сделать ваш агент начинает с 1.

Прежде чем я получу ответ, это не должно иметь значения или использовать системные переменные: мне нужно, чтобы агент использовал один и тот же каталог для каждой сборки, потому что я использую Terraform для развертывания некоторых простых файлов в нашем балансировщике нагрузки; Terraform использует файлы состояния. Если файл состояния не существует (например, когда агент использует другую рабочую папку), Terraform пытается создать файл как новый на нашем балансировщике нагрузки, что вызывает ошибку «файл уже существует».

person Ryan Washburn    schedule 30.07.2021