У меня есть новая сборка TFS (локальная), которая получает весь код при каждом запуске. У меня для очистки установлено значение false как на этапе получения источников, так и на этапе сборки. Я почти уверен, что этого не произошло около недели назад, когда я впервые начал использовать сборку TFS2017, но теперь каждая сборка повторно получает код. Что мне не хватает?
Сборка TFS2017.2 всегда очищает (получает новый код) при каждой сборке — почему
- Можете ли вы поставить сборку в очередь с переменной system.debug, для которой установлено значение true, а затем поделиться журналами сборки? Загружает ли шаг ресурсов все файлы в проекте или только файлы dll? Возникает ли эта проблема, если вы отключите все задачи сборки в определении сборки, просто продолжая получать исходный код? 23.02.2018
Ответы:
Моя проблема заключалась в том, что я одновременно сопоставил папку и ее подпапку, но не осознавал этого. Затем удаление сопоставления подпапок решает проблему.
Вот как я узнал:
- Поставить новую сборку в очередь с переменной
system.debug
, установленной наtrue
Посмотрите на журнал во время сборки и найдите что-то вроде (
** **
) этого:**Attempting to find a workspace: 'ws_4_56'** Skipping workspace: 'ws_1_56' Skipping workspace: 'ws_2_55' Skipping workspace: 'ws_3_56' Candidate workspace: 'ws_4_56' **Expected number of mappings: '57'. Actual: '56'** Skipping workspace: 'ws
<Workspace computer="xxxxx" islocal="true" name="ws_4_56" ...>
56' Skipping workspace: 'ws_6_56' **Matching workspace not found.**Если у вас есть ожидаемое количество сопоставлений, превышающее фактическое, вам необходимо проверить, какое сопоставление является избыточным, сравнив выходные данные агента в
<Workspace computer="xxxxx" islocal="true" name="ws_4_56" ...>
с сопоставлениями в пользовательском интерфейсе TFS.- Удалите все сопоставления вложенных папок, которые уже включены в сопоставление папок.
Предложите сравнить журнал сборки для некоторых запусков сборки, проверьте, используется ли одно и то же рабочее пространство в агенте сборки.
Если есть несколько рабочих областей, вы можете использовать несколько агентов сборки. Очистка не имеет значения, если вы каждый раз получаете новый агент. Вы можете укажите агент сборки vNext в определении сборки, а затем несколько раз поставьте в очередь для тестирования.
Также попробуйте явно определить переменную Build.Clean
и установить ее значение ниже на вкладке Переменные:
all
, если вы хотите удалить$(Agent.BuildDirectory)
, то есть всю рабочую папку, содержащую папку с исходным кодом, папку с двоичными файлами, папку с артефактами и т. д.source
, если хотите удалить$(Build.SourcesDirectory)
.binary
Если вы хотите удалить$(Build.BinariesDirectory)
.
Другой способ сузить проблему — удаленно связаться с агентом сборки, проверить, удалены ли файлы под C:\TFS2017_agent\_work\3\S\XX
во время процесса сборки.
Если все вышеперечисленное не работает, попробуйте воссоздать определение сборки с теми же настройками, которые могут помочь.
Установите для Build.RepoClean значение false в разделе «Переменные». Кажется, это трюк