2015-10-17 63 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