tf.exe на tfspreview
Мне нужно получить ChangeSetId в tfspreview для нашей непрерывной интеграции. Мне просто нужен этот номер, больше ничего. Я перепробовал все возможные задачи MSBuild, которые мог найти, но всегда есть другая, меньшая проблема, которая останавливает меня.
За MSBuild.ExtensionPack.Tfs.TeamBuild
Я получил:
Could not load file or assembly 'Microsoft.TeamFoundation.Client, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
и для TfsClient -task
в Community-Pack (который генерирует следующий exec: tf.exe history . /StopAfter:1 /noprompt /format:detailed /recursive
) Я получил:
The specified task executable could not be run. The system cannot find the file specified
Мой вопрос Можно ли выполнить TF.exe
на сервере tfspreview? или я могу получить сборку Microsoft.TeamFoundation.Client
на сервере сборки выполнить одну из этих двух задач?
3 ответа
Хорошо, я здесь, чтобы сказать вам, что это возможно без написания вашей собственной пользовательской задачи, с использованием API и т. Д.... Есть много статей здесь о Stackru, но те, которые с решениями, похоже, не работают для TFS 2010 Я просто провел целый день, стуча головой о стену:D
Вам необходимо установить задачи сообщества MSBuild. Убедитесь, что вы получили последнюю версию здесь: https://github.com/loresoft/msbuildtasks. Последние, по-видимому, были обновлены и перестроены под сборки TFS 2010.
Вы собираетесь использовать задачу MSBuild.Community.Tasks.Tfs.TfsClient. Причина, по которой вы получаете эту ошибку из-за невозможности запустить исполняемый файл, заключается в том, что это MSBuild ToolTask, и вам нужно передать путь к исполняемому файлу как свойство (ToolPath) к задаче.
Задача TfsClient - это просто оболочка для tf.exe, и в ней отсутствуют многие возможные функции для работы с переключателями в MSbuild-y. (и документация для этой задачи не существует - мне пришлось взглянуть на код) К счастью, я понял, что вы можете ввести все ключи командной строки как часть самой команды.
Таким образом, ваш последний звонок будет выглядеть примерно так...
<MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="$(PathToTfTool)" Command="history /collection:$(TfsProjectCollectionUrl) /stopafter:1 /version:T /format:detailed $(VersionControlPathForBuildWorkspace)" Recursive="true" >
<Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />
И после 22 неудачных неудачных сборок или сборок без данных я наконец получил... TFS ChangeSetNumber: 41
YAHOO!
Получил команду от Мартина Вудворда: http://www.woodwardweb.com/vsts/determining_the.html УБЕДИТЕСЬ, ЧТО ВЫ ИСПОЛЬЗУЕТЕ / ДЕТАЛЬНЫЙ ВЫКЛЮЧАТЕЛЬ ИЛИ НЕ ВОЗВРАЩАЕТЕ ИЗМЕНЕНИЕ. Мне пришлось посмотреть на код для задачи и выяснить, как он анализировал вывод tf.exe, чтобы понять это.
Код для TfsClient здесь для справки: https://github.com/loresoft/msbuildtasks/blob/master/Source/MSBuild.Community.Tasks/Tfs/TfsClient.cs
Вот строка кода, которая работала для меня.. после нескольких часов и нескольких попыток. разница в том, что я создал выходной элемент TaskParameter внутри
Куда:
ToolPath = "C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE" - зависит, используете ли вы 32- или 64-разрядную версию.
$ / WorkspacePath имя пути в моей рабочей области, вы можете просмотреть его с помощью команды tf workspace
<MSBuild.Community.Tasks.Tfs.TfsClient ToolPath="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE" Command="history /s:http://tfsserver01:8080/tfs/collectionname /stopafter:1 /version:T /format:detailed $/WorkspacePath" Recursive="true" > <Output TaskParameter="Changeset" PropertyName="ChangesetNumber"/> </MSBuild.Community.Tasks.Tfs.TfsClient> <Message Text="TFS ChangeSetNumber: $(ChangesetNumber)" />
Но благодаря этой теме
Как именно выглядит рабочий процесс MSBUILD? Вы передаете этот параметр в MSBUILD или какой-то пользовательский компонент захватывает эту информацию во время работы MSBUILD?
Я натолкнулся на класс InformationNodeConverters, который имеет метод GetAssociatedChangesets, который принимает IBuildDetail и возвращает список IChangesetSummary. Это также потребует, чтобы ваши наборы изменений уже были связаны, прежде чем вы перейдете к задаче MSBUILD. Сегодня вечером мне нужно проверить мой экземпляр TFSPreview, чтобы проверить, могу ли я отредактировать шаблон сборки, но я подозреваю, что вы сможете использовать что-то подобное.