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