Как сохранить параметры сборки в TFS Build (TFS server 2017 и build agent 2013)

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

<Message Text="System Drive: $(SystemDrive)"/>
<Message Text="BuildAgtentId: $(BuildAgentId)" />
<Message Text="BuildDefinitionPath: $(BuildDefinitionPath)" />
<Message Text="SourceDir: $(SourceDir)" />
<Message Text="SrcDir: $(SrcDir)" />
<Message Text="BuildDefinitionPath: $(BuildDefinitionPath)." />
<Message Text="BuildDefinitionId: $(BuildDefinitionId)." />
<Message Text="TF_BUILD_BUILDDIRECTORY: $(TF_BUILD_BUILDDIRECTORY)" />

Теперь, делая это, я предполагал, что $(SourceDir) преобразуется в C:\Builds\$(BuildDefinitionId), поскольку это то, что у меня есть в настройках моего рабочего каталога для моего агента. Я также установил переменную в параметрах MSBuild:

/p:SrcDir=$(SourceDir)  

Но когда запускается.proj, вот мой вывод:

System Drive: C:
BuildAgtentId: 
BuildDefinitionPath: 
SourceDir: 
SrcDir: $(SourceDir)
BuildDefinitionPath: .
BuildDefinitionId: .
TF_BUILD_BUILDDIRECTORY: .

Таким образом, кажется, что только $(SystemDrive) сохраняется во время сборки. И мой набор параметров в аргументах MSBuild, кажется, даже не установлен правильно (SrcDir). Как я могу получить доступ к этим переменным во время сборки, чтобы я знал, где будут находиться мои файлы? Мне нужно вызвать некоторые другие программы (например, attrib) и передать местоположение моих файлов, и, похоже, ничего не сохраняется.

Основываясь на этой статье, я подумал наверняка, что TF_BUILDDIRECTORY будет работать, но это не так.

Затем я попытался использовать эту статью, которая говорит, что это должно работать:

<GetBuildProperties TeamFoundationServerUrl="$(TFSTeamFoundationServerUrl)" BuildUri="$(BuildUri)">
  <Output TaskParameter="BuildDirectory" PropertyName ="TFSBuildDirectory" />
  <Output TaskParameter="TeamProject" PropertyName="TFSTeamProject" />
</GetBuildProperties>

<Message Text="BuildLocation: $(TFSBuildDirectory)." />
<Message Text="TeamProject: $(TFSTeamProject)."/>

И хотя TeamProject работает, BuildDirectory - нет. Итак, я получаю это:

BuildLocation: .
TeamProject: MDRVIDEOTOUCH.

2 ответа

Вам необходимо использовать переменные среды сборки XAML.

Некоторые из этих значений недоступны, но вы можете получить некоторые из них:

  • TF_BUILD_BUILDDIRECTORY Рабочий каталог агента сборки. Например: C: \ Build \ BuildBot3 \ CoolApp \ CIBuild.
  • TF_BUILD_BUILDNUMBER Номер сборки сборки. Например: CIBuild_20130613.6.
  • TF_BUILD_SOURCESDIRECTORY Подкаталог источников рабочего каталога агента сборки. Этот каталог содержит ваш исходный код. Например: C:\Build\BuildBot3\CoolApp\CIBuild\src.

Вам необходимо передать значение в задачу MSBuild через аргументы MSBuild.

  1. Определите свойства в разделе PropertyGroup вашего файла проекта, например <PropertyGroup><SourceDir></SourceDir><BuildDefinitionName></BuildDefinitionName></PropertyGroup>
  2. Укажите аргументы MSBuild: /p:SourceDir="$(TF_BUILD_BUILDDIRECTORY)" /p: BuildDefinitionName="$(TF_BUILD_BUILDDEFINITIONNAME)"

С другой стороны, в MSBuild есть некоторые переменные, вы можете проверить эту ветку: Как мне получить текущий каталог в скрипте msbuild?

Другие вопросы по тегам