以编程方式更改和保存 ProcessParameters TFS 构建定义
changing and saving ProcessParameters programatically TFS Build Definitions
TFS 2012
对比 2012
我有大量 Build Definitions
来自单个模板。
我还有一个 Master Build 可以将所有这些构建排队并在需要时传递参数。
该部分是使用 TFS 社区扩展完成的:QueueBuilds
。
问题:
有没有办法访问 Build Definitions
,遍历它们,(我自己可以到这里)并更改它们的 ProcessParameters
和 保存 它们。
您可以使用 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)
TFS 2012
对比 2012
我有大量 Build Definitions
来自单个模板。
我还有一个 Master Build 可以将所有这些构建排队并在需要时传递参数。
该部分是使用 TFS 社区扩展完成的:QueueBuilds
。
问题:
有没有办法访问 Build Definitions
,遍历它们,(我自己可以到这里)并更改它们的 ProcessParameters
和 保存 它们。
您可以使用 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)