изменение и сохранение ProcessParameters программно Определения сборки TFS

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

Эта часть была выполнена с использованием расширения сообщества TFS: QueueBuilds.

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


person Claudius    schedule 29.01.2016    source источник


Ответы (1)


Вы можете использовать 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)
person chief7    schedule 29.01.2016
comment
Спасибо, я попробую - person Claudius; 29.01.2016
comment
GetBuildDefinition($TeamProjectName, $BuildName) Могу ли я передавать вместо них строки? Я собираюсь преобразовать его в C#, чтобы я мог запускать его как пользовательскую активность и передавать аргументы из этой единственной сборки всем им. - person Claudius; 29.01.2016
comment
Да, эти переменные просто установлены в строки ранее в моем скрипте. Добро пожаловать в PowerShell! Я еще не эксперт, но определенно это инструмент, который стоит изучить. - person chief7; 29.01.2016
comment
Просто чтобы вы знали, это сработало, когда я понял, как сохранять определения сборки. - person Claudius; 29.01.2016