2012-10-25 45 views
1

我開始潛入2012 TFS和我有層次有基本的瞭解,以及如何構建服務器,控制器和代理工作,構建腳本如何不同可以有不同的配置和項目。TFS 2012:Correllating來構建二進制和源代碼

然而,我與掙扎的事情之一是我們的源代碼控制解決方案的要求,指出我需要能夠證明一個特定的變更或shelfset產生的特定版本。也就是說,給定一個特定的二進制文件,我可以指向生成該二進制文件的版本變更集。我還應該能夠指向合併到發行版分支中的測試變更集。這裏的想法不僅僅是責任分離,而且由於發佈和測試變更集是相同的,所以沒有代碼被代碼審查人員注入到項目中。

我讀過one blog post大約「二進制促銷」會談 - 將這個概念在我的情況有用嗎?我很難找到如何在TFS中設置這種二進制促銷。

回答

4

部署

開箱TFS真的不支持部署的,它可以部署到構建1點的位置往往是一個測試服務器(認爲實驗室管理)。 TFS 2012已經構建了對Azure部署的支持,但它們仍然在構建結束時發生,構建工件無法自動部署到新位置。

你可以修改生成的模板,允許釋放到不同的位置,但仍然是一個新鮮的構建在任何環境,而不是真正的二進制促銷活動。

但是,TFS確實具有構建質量的概念,並在質量改變時實際觸發事件。 TFS Deployer是第三方工具,可以掛鉤質量更改事件並執行powershell腳本。這意味着通過簡單更改下拉值,您可以自動啓動一個腳本,並釋放到您想要的任何環境。您可以將構建質量列表(每個團隊集合)自定義爲環境列表(dev,uat,staging,production等),然後腳本找出將特定構建發佈到的位置。

VS2012對web部署也有一些很好的改進,這意味着部署配置存儲在項目的源代碼控制中,理論上這意味着它們將在TFS部署者使用的drop文件夾中可用。

我不相信TFS不斷打造品質,這意味着你不能真正使用的建設質量歷史保持什麼部署到該環境中的列表的歷史。儘管你可以很容易地將這些信息記錄爲部署腳本的一部分。或者至少在版本中添加一個自定義彙總節點,並提供關於該版本的信息。

TFS2012確實能夠將構建標記爲部署爲Azure部署功能的一部分,但您使用腳本標記tfs deployer builds as deployed,但它不會非常有用。

Octopus Deploy是另一個值得檢驗的項目,如果您的構建模板創建NuGet包,可以用來代替TFS部署者。它需要對生產硬件進行更多的控制,因爲您需要在每個環境上安裝代理以處理版本,但它解決了部署中的許多其他問題。

版本控制

一旦你可以選擇自動釋放,人們不會繞過一個很好一致的方式,你可以看看增強構建模板注入Build版本,或變更號碼作爲裝配版本作爲該自動構建的一部分構建的任何東西有很多不同的方法可以做到這一點,並有大量的blogpoststools來幫助你達到目的。

或者你可以只使用自動裝配版本([assembly: AssemblyVersion("1.0.*")])給你的日期/時間發生的身材,這就像1.0.1234.123結束,其中1234是一樣的東西,因爲2000年1月1日的天,123分鐘自午夜以來(我的具體情況可能是錯誤的)。

如果您正在部署網站,那麼我強烈建議將當前的構建版本注入到某處的html中。通過這種方式,您可以檢查網站運行的版本,而無需訪問bin目錄。它也可以作爲查詢字符串附加到css/js文件導入,以確保在版本之間不會發生瀏覽器緩存。

思考

個人而言,我很希望微軟意識到XAML構建工作流正在嘗試做的太多了,他們分手了不同的關注點(構建,測試,部署...)成不同的腳本化的部分。當然,直到TFS的下一個主要版本纔開始。儘管使用Team Foundation Service,他們試圖更快地迭代,所以他們實際上可以將Azure部署的東西擴展到更近的將來更有用的東西。

+0

這是一個非常周到和完整的答案,謝謝!我需要一些時間來解析所有這些,但我真的很感激它。 –

+0

我已經詳細瞭解了TFS爲Azure客戶提供的服務 - 感覺現場用戶在很多方面都是二等公民。 –

+1

許多天藍色的功能現場到達TFS,發佈時間表並不快(每週3次,每月3次)。這是因爲OnSite允許比雲版本更多的定製,所以他們更容易推出更改。 – Betty