1
我们有一个VSO Git存储库,TFS构建定义和一个脚本,用于启动特定提交时的构建。 问题(烦恼)是查看VSO中已完成构建的列表时,“源分支”列始终显示“(无分支)”(但“源版本”确实显示了预期的提交ID)。指定(git)TFS源代码分支(VSO)构建
构建定义只是一个香草GitTemplate.12.xaml
具有CheckoutOverride
参数,这里是如何的建立得到排队:
$tfs = New-Object Microsoft.TeamFoundation.Client.TfsTeamProjectCollection($TfsProjectCollectionUrl, $TfsServiceAccount)
$buildServer = $tfs.GetService([Microsoft.TeamFoundation.Build.Client.IBuildServer])
$buildDefinition = $buildServer.GetBuildDefinition($TeamProjectName, $BuildDefinitionName)
$buildRequest = $buildDefinition.CreateBuildRequest()
$processParameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::DeserializeProcessParameters($buildRequest.BuildDefinition.ProcessParameters)
$processParameters.CheckoutOverride = $GitCommitHash;
$buildRequest.ProcessParameters = [Microsoft.TeamFoundation.Build.Workflow.WorkflowHelpers]::SerializeProcessParameters($processParameters)
$queued = $buildServer.QueueBuild($buildRequest)
- 是否有指定支部+承诺的方式,而不使用标签(* )。
- 如果在多个分支中找到提交散列,该怎么办? (例如:
git cherry-pick
)
(*)其中很多都是工作分支中的好友构建,并且创建临时标记会污染该名称空间或需要垃圾回收。
(**)不能使用refs/heads/...
- 构建必须与特定的提交而不是HEAD相关联。
这不起作用。我检查了我自己的构建_definition_,并且默认分支已经是'refs/heads/master',但是当请求中指定了CheckoutOverride时,新构建_requests_仍然显示'(no branch)'。 – Serguei
你是正确的,如果在CheckoutOverride中指定值,则源分支将显示(不分支)。在我看来,Checkout Override可以覆盖默认的分支和提交,你可以在master和branch中指定Checkout Override的值,所以Source Branch不能告诉它的源分支。如果结账覆盖提交属于主/分支,则可以尝试创建两个构建定义,一个用于master,另一个用于分支,然后使用master/branch构建定义。 –
是的,正如我在问题中提到的那样,提交可以在> 1分支中,尽管在大多数情况下它是毫不含糊的。例如,当提交只存在于一个分支中时(例如,一个工作分支被合并为主分支之前),那么在'CheckoutOverride'中指定这样的提交也意味着一个分支。 – Serguei