以编程方式更改和保存ProcessParameters TFS构建定义

时间:2016-01-29 13:40:51

标签: tfs build build-definition custom-activity

2012年TFS VS 2012 我有大量的Build Definitions来自单个模板。 我还有一个Master Build来排队所有这些构建并传递参数,如果我需要这样做的话。

该部分是使用TFS社区扩展完成的:QueueBuilds

问题: 有没有办法访问Build Definitions,循环播放,(可以自己到这里)并更改他们的ProcessParameters保存

1 个答案:

答案 0 :(得分: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)
相关问题