2016-01-29 2 views
0

TFS 2012 VS 2012 У меня есть большое количество Build Definitions, которые получены из одного шаблона. У меня также есть Master Build, чтобы поставить в очередь все эти сборки и передать аргументы, если мне нужно это сделать.Изменение и сохранение ProcessParameters программно TFS Определения сборки

Эта часть была выполнена с использованием TFS Community Extension: QueueBuilds.

Проблема: Есть ли способ получить доступ к Build Definitions, цикл через них, (можно получить до здесь сам) и изменить их ProcessParameters и сохранить их.

ответ

2

Вы можете использовать Microsoft.TeamFoundation.Build.Client и связанные сборки для обновления параметров процесса через PowerShell или C#. Одна сложная часть - это параметры, хранящиеся в XML, поэтому вам нужно десериализовать, внести свои изменения, а затем снова сериализовать их, чтобы установить их.

Это, вероятно, не будет работать без некоторой настройки, но вот некоторые фрагменты из одного из моих сценариев, которые помогут:

[void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Build.Client') 
    [void][Reflection.Assembly]::LoadWithPartialName('Microsoft.TeamFoundation.Build.Workflow') 
$projectCollection = [Microsoft.TeamFoundation.Client.TfsTeamProjectCollectionFactory]::GetTeamProjectCollection($TFSUri) 
$buildServer = $projectCollection.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer]) $buildServer = GetBuildServer -TFSUri $TFSUri 
$buildDefinition = $buildServer.GetBuildDefinition($TeamProjectName, $BuildName); 
... 

    $parameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($buildDefinition.ProcessParameters) 
    $msBuildArguments = $parameters.Get_Item("MSBuildArguments") 
    $msBuildArguments = "$msBuildArguments /p:ImportParametersFilesOverride=true" 
    $parameters.Set_Item("MSBuildArguments", $msBuildArguments) 
    $parameters.Add("GetVersion", "c$TFSChangeSetNumber") 
    $buildRequest.ProcessParameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::SerializeProcessParameters($parameters) 
+0

Спасибо, я дам ему попробовать – Claudius

+0

GetBuildDefinition ($ TeamProjectName, $ BUILDNAME) Могу ли я передать строки вместо них? Я собираюсь преобразовать его в C#, чтобы я мог запускать его, как пользовательскую активность, и передавать аргументы из этой единственной сборки для всех из них. – Claudius

+0

Да, эти переменные просто установлены в строки ранее в моем скрипте. Добро пожаловать в PowerShell! Я не эксперт, но я, безусловно, инструмент, который стоит изучать. – chief7