TFS 2008 Непрерывная интеграция MSBUILD в филиале не работает на метке

Я пытаюсь использовать CI в ветке одного из моих проектов TFS. MSBuild не работает, только когда я пытаюсь использовать Branch. Я указываю ту же сборку на магистральном проекте, он отлично работает.

Ошибка, которую я получаю из журнала сборки:

Ярлык задачи

Метка TeamFoundationServerUrl = http: // TFSServer: 8080 / BuildUri = vstfs: /// Build / Build / 6763 Name = Test_SF_20090619.1 Scope = $ / MyProject Recursive = True Комментарии = Метка, созданная Team Build Version = BuildServer3D143_66 Child = Replace Files = $ / C: \ Program Files \ MSBuild \ Microsoft \ VisualStudio \ TeamBuild \ Microsoft.TeamFoundation.Build.targets (812,5,812,5):

ошибка: в вашей рабочей области в $ / не найдено подходящих элементов.

Готово выполняется метка задачи - НЕ УДАЛОСЬ.

Завершено построение целевой CoreLabel в проекте TFSBuild.proj - НЕ ИСПОЛЬЗУЕТСЯ.

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

Получить отрывок задачи из журнала сборки:

Получить задачу

Получить TeamFoundationServerUrl = http: // TFSServer: 8080 / BuildUri = vstfs: /// Build / Build / 6768 Force = True Overwrite = False PopulateOutput = False Preview = False Recursive = True Version = C204806 Workspace = BuildServer3D143_66

Готово выполнение задачи Get.

Это полная сборка. В GET должно быть около тысячи файлов.

Общая информация

  • TFS 2008
  • Visual Studio 2008
  • Установленный сервер сборки (сборки выполнялись последний год)
  • Разветвленный проект - это веб-сайт ASP.NET (2.0 Framework).

Параметры полной сборки

  • / p: SkipClean = false
  • / p: SkipInitializeWorkspace = ложь
  • / p: ForceGet = истина
  • / p: IncrementalBuild = false
  • / p: IncrementalGet = false

примечание: я знаю, что IncrementalBuild лишний, но я просто хотел убедиться.

Вопросы:

  • Есть ли ограничения на сборку ветки?
  • Есть идеи, почему MSBuild не может извлекать файлы из рабочей области ветки?

person Community    schedule 19.06.2009    source источник


Ответы (2)


Если это для CI, то, скорее всего, вы выполняете инкрементное получение. TFS будет беспокоиться только о том, чтобы получить файлы, которые, по его мнению, изменились с момента последнего получения - например, если вы удалите какие-либо файлы со своего сервера, он все равно будет думать, что у вас есть эти файлы, и больше не получит их. В этом случае вам нужно будет запустить сборку один раз с отключенными дополнительными свойствами, чтобы принудительно получить исходный код полностью. Это можно сделать, переопределив свойства в поле командной строки MSBuild в диалоговом окне «Построение очереди» с помощью:

/p:IncrementalGet=false;ForceGet=true

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

person Jason Williams    schedule 20.06.2009
comment
Я выставил свои параметры сборки выше. Даже после добавления / p: IncrementalGet = false не повезло. Это вполне могло быть отображение; но если так, то я не уверен, почему. Для этого TFSProject отображается только одно рабочее пространство. Он находится в корне $ / MyProject. И ствол, и ветка являются вложенными папками этого проекта. Я попытался добавить сопоставление рабочей области специально для ветки, но TFS просто удаляет его как дублирующее сопоставление. - person ; 21.06.2009
comment
Я подозреваю, что это связано с тем, как настроена ветка, но я недостаточно знаю о MSBuild в этих обстоятельствах, чтобы предложить что-то еще, чего я боюсь. - person Jason Williams; 22.06.2009

В этом случае у меня было две проблемы.

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

Второй вопрос был немного сложнее. При очистке файла проекта сборки я удалил следующий раздел.

<SolutionToBuild Include="$(BuildProjectFolderPath)/../../_stage/MyProject/MySolution.sln">
        <Targets></Targets>
        <Properties></Properties>
</SolutionToBuild>

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

Некоторые из вас могут задаться вопросом, работают ли и другие мои сборки, ведь в них нет старых файлов сборки. Да, но у меня были определены цели, которые выполняли всю работу, о которой я действительно заботился. Так что SolutionToBuild немного несерьезный.

person Community    schedule 24.06.2009