2015-10-17 60 views
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) 
  1. 是否有指定支部+承诺的方式,而不使用标签(* )。
  2. 如果在多个分支中找到提交散列,该怎么办? (例如:git cherry-pick

(*)其中很多都是工作分支中的好友构建,并且创建临时标记会污染该名称空间或需要垃圾回收。

(**)不能使用refs/heads/... - 构建必须与特定的提交而不是HEAD相关联。

回答

0

“源分支”列应该显示“构建定义”中的“默认分支用于手动构建”的名称。例如,如果您在Build Definition中为手动构建选择默认分支,则会在已完成的构建中看到相应的“源分支”,但是如果让手动构建的默认分支为空白,则“源分支”将显示(无分支),请参阅下面的截图:

enter image description here

enter image description here

所以,你需要手动建立指定默认的分支,然后你会得到正确的源科。

+0

这不起作用。我检查了我自己的构建_definition_,并且默认分支已经是'refs/heads/master',但是当请求中指定了CheckoutOverride时,新构建_requests_仍然显示'(no branch)'。 – Serguei

+0

你是正确的,如果在CheckoutOverride中指定值,则源分支将显示(不分支)。在我看来,Checkout Override可以覆盖默认的分支和提交,你可以在master和branch中指定Checkout Override的值,所以Source Branch不能告诉它的源分支。如果结账覆盖提交属于主/分支,则可以尝试创建两个构建定义,一个用于master,另一个用于分支,然后使用master/branch构建定义。 –

+0

是的,正如我在问题中提到的那样,提交可以在> 1分支中,尽管在大多数情况下它是毫不含糊的。例如,当提交只存在于一个分支中时(例如,一个工作分支被合并为主分支之前),那么在'CheckoutOverride'中指定这样的提交也意味着一个分支。 – Serguei