TFS 2010 的自動化建置 (Team Build) 讓所有 Assambly 自動依序跳號

TFS 2010 的自動化建置 (Team Build) 讓所有 Assambly 自動依序跳號

TechDay 2011 的課程有一堂是

高品質軟體的基礎 - 持續整合的應用 Continuous Integration

 

其中最後一段是講到 Team Build 如何可以自動「依序」跳號

並且可以自行決定啟始版號

 

因為當時在 TechDay 課程塞了很多東西

想說讓大家知道 Team Build 可以做到類似的效果,日後再轉成文章

 

沒想到一轉眼半年就過去了! (汗)

 

這篇文章主要是參考 Jeremy Jameson 的 Blog 來的

只要花 一、兩天基本上就可以很快上手

 

 

本來我有把所有操作的過程全部抓下來

但之前更換電腦時忘了把 Blog 草稿一併備份

整個就是杯具呀 ( 遠目 )

 

所以還是要麻煩自已看英文原稿了

 

 

=========== 主要需求 ================

 

當時是因為 G 公司他們有核心的研發團隊,要定期交付版本

並且需要由建置人員決定當時的版號來依序跳號

不想要用預設的方式產生,但也不想要開發人員一個一個修改

所以要統一透過 Team Build 一併完成

除了自動建置可以跳號外,也必須支援手動建置時同相同的編號依序跳號

 

 

 

基本上一般的團隊會比較建議用 VS 內建的自動跳號就可以

使用 AssemblyVersion 預設的自動跳號

因為 .NET Framework 所有的元件都是如此

若是有其他開發考量,那麼就需要調整一下建置流程和做法

 

 

=============  自動跳號建置的結果  ======================

image

image

第一次建置結果

 

image

image

第二次建置結果

可以看到 Build Number 已經依序跳了一個號碼

 

 

接下來大致上說明一下比較重要的地方

 

 

=======  Build Template 建置腳本 =======

這裡是用 DefaultTemplate.xaml 複製一份修改而成的

image

這裡是用 IncrementVersionTemplate.xaml 為主,記得修改好後要再放回到版控中。

不然會找不到建置腳本

 

詳細內容

http://blogs.msdn.com/b/jjameson/archive/2010/11/29/incrementing-the-assembly-version-for-each-build-in-tfs-2010.aspx

 

有關於文章中講到的變數、引數在下方要點選後就會開啟了!

image

其他的只要照著做就沒有太大的問題

 

若是想要知道 Build Work flow 的 Active

可以參考

Team Foundation Build 活動 ( 全中文 )

http://msdn.microsoft.com/zh-tw/library/gg265783.aspx

 

 

======= 處理自動跳號 ==========

這個動作並不是由 Team Build 來執行的,而是在 代理主機的透過 MSBuild 執行

在 Update Build Number 的 active

其中 Incremant AssmblyVersion for next build 是 MSBuild Active

 

MSBuild 的腳本其實就是大家非常熟悉的 Proj 檔

自從 Team Foundation Server 推出後

Proj 檔就全面改成了 MSBuild 腳本了

 

這對於 .NET 的開發團隊來說是非常方便的點

完全不用自已去寫

 

image

 

MSBuild 腳本內容

image

若是熟悉 Java Ant 或是 Maven 的朋友就會發現,根本就是一樣的東西嘛  XD

為什麼會自動依序跳號?那是因為透過 MSBuild Extension Pack 的套件 Version 達成的。

腳本很單純

 

比較特別的是因為 txt 也是在版控中,所以需要透過 Exec 指令進行簽出、入的動作

 

註:同理若是想要做「自動化佈署」到指定的機器也是同樣的概念來處理的

 

就不用擔心說每個專案都要編輯 Build Teamplate 檔了

 

======= 準備 ShredAssemblyInfo.cs =======

image
在 VS 中為了可以讓多個 DLL 共用同一個 編號是透過 Shared 的機制

在 CoreServices 專案中 AssemblyVersionInfo 是用 「Link」的方式

真正的檔案都在 Solution Items 中

有興趣的可以參考

http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx

 

======= MS Build Extension Pack =======

TFS Team Build Server 必須安裝此外掛套件

http://msbuildextensionpack.codeplex.com/

=================================

 

希望可以透過以上的資訊,讓團隊可以更快地了解 Team Build 是怎麼做的

 

日後團隊才有辦法做更進階的事情

 

像是 建置後自動合併 分支、建置後自動佈署到指定機器

 

尤其是 金融業 都很需要這樣子的機制呢!

 

參考書籍

Inside the Microsoft® Build Engine, 2nd Edition

Using MSBuild and Team Foundation Build

http://shop.oreilly.com/product/0790145301949.do

 

參考資料

Team Foundation Build 活動

http://msdn.microsoft.com/zh-tw/library/gg265783.aspx

Incrementing the Assembly Version for Each Build

http://blogs.msdn.com/b/jjameson/archive/2010/03/25/incrementing-the-assembly-version-for-each-build.aspx

Incrementing the Assembly Version for Each Build in TFS 2010

http://blogs.msdn.com/b/jjameson/archive/2010/11/29/incrementing-the-assembly-version-for-each-build-in-tfs-2010.aspx

Best Practices for .NET Assembly Versioning

http://blogs.msdn.com/b/jjameson/archive/2009/04/03/best-practices-for-net-assembly-versioning.aspx

Shared Assembly Info in Visual Studio Projects

http://blogs.msdn.com/b/jjameson/archive/2009/04/03/shared-assembly-info-in-visual-studio-projects.aspx

自訂 SolutionToBuild 項目群組

http://msdn.microsoft.com/zh-tw/library/bb399127.aspx

How to: Create an Automated Build and Deployment Solution with Team Foundation Server Team Build

http://msdn.microsoft.com/en-us/library/ff650529.aspx