Как сохранить параметры сборки в 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.
- Определите свойства в разделе PropertyGroup вашего файла проекта, например
<PropertyGroup><SourceDir></SourceDir><BuildDefinitionName></BuildDefinitionName></PropertyGroup>
- Укажите аргументы MSBuild:
/p:SourceDir="$(TF_BUILD_BUILDDIRECTORY)" /p: BuildDefinitionName="$(TF_BUILD_BUILDDEFINITIONNAME)"
С другой стороны, в MSBuild есть некоторые переменные, вы можете проверить эту ветку: Как мне получить текущий каталог в скрипте msbuild?