Visual Studio TFS 團(tuán)隊項目和集合指南
在 MSDN 雜志 文章,“Visual Studio TFS 分支和合并指南”(msdn.microsoft.com/magazine/gg598921) 中,Visual Studio ALM Rangers 推出了一些新的分支方案和相關(guān)指導(dǎo),可幫助您處理復(fù)雜的真實(shí)分支和合并環(huán)境,以便改進(jìn)解決方案的一致性和質(zhì)量以及應(yīng)用程序生命周期管理 (ALM) 的整體過程。
概括來說,Rangers 就是通過解決功能缺失問題以及消除阻礙產(chǎn)品采用的因素來提倡 Visual Studio 產(chǎn)品組、Microsoft 服務(wù)和 Microsoft 最有價值專家 (MVP) 社區(qū)之間協(xié)作的一組專家。
在本文中,Rangers 提供了組織和配置 Team Foundation Server (TFS) 團(tuán)隊項目和團(tuán)隊項目集合的指南。
閱讀完本文后,您能更好地了解以下內(nèi)容:
- 團(tuán)隊項目集合及其優(yōu)點(diǎn)
- 有關(guān)如何選擇將一個或更多團(tuán)隊項目合并到一個團(tuán)隊項目集合中或?qū)⑺鼈儽A粼趩为?dú)團(tuán)隊項目集合中的注意事項
- 有關(guān)如何通過組織團(tuán)隊項目和團(tuán)隊項目集合來提高隔離或改進(jìn)可伸縮性的注意事項
- 如何存檔一個或更多不活動的團(tuán)隊項目
本文將幫助您理解團(tuán)隊項目和團(tuán)隊項目集合組織是如何受下列問題影響的:
- 安全性和 TFS 配置、團(tuán)隊項目集合和團(tuán)隊項目
- 選擇過程模板
- 過程模板自定義,包括自定義工作流、工作項類型自定義、自定義報告、自定義查詢和自定義過程指南
- 團(tuán)隊組織
- 團(tuán)隊項目組織,包括區(qū)域和迭代
- 項目管理注意事項,包括項目里程碑和計劃
規(guī)劃
為了確保所有利益干系人具有有效和可伸縮的 ALM 系統(tǒng),Visual Studio TFS 規(guī)劃通常會從建議的基礎(chǔ)結(jié)構(gòu)以及團(tuán)隊項目和團(tuán)隊項目集合的架構(gòu)開始。
Visual Studio 2010 快速參考指南 (vs2010quickref.codeplex.com) 以及 Visual Studio 2010 和 TFS 2010 虛擬機(jī) (VM) 工廠 (rangersvsvmfactory.codeplex.com) Rangers 指南項目提供了概念、指南和快速參考海報,用于支持容量規(guī)劃并幫助回答有關(guān)基礎(chǔ)結(jié)構(gòu)應(yīng)為物理或虛擬基礎(chǔ)結(jié)構(gòu)還是兩者并存的問題。
雖然您通常先規(guī)劃和定義團(tuán)隊項目集合,然后再在 TFS 2010 環(huán)境中定義團(tuán)隊項目,但是我們會首先介紹團(tuán)隊項目。
Visual Studio 團(tuán)隊項目
在 TFS 2005 和 TFS 2008 中,一個 TFS 服務(wù)器可能會承載一個或更多團(tuán)隊項目。 每個團(tuán)隊項目實(shí)質(zhì)上都是一個產(chǎn)物容器,包括源代碼(組織在各文件夾、分支文件夾和分支中),并包括一個或更多 Visual Studio 解決方案、Team Build 配置文件、Team Load Test Agent 以及可選的 SharePoint 存儲庫,該存儲庫包含項目相關(guān)文檔以及由團(tuán)隊用來跟蹤和執(zhí)行由過程模板控制的一組工作的安全設(shè)置。 不能將團(tuán)隊項目與 Visual Studio .NET 項目混淆,后者包含生成 Microsoft .NET Framework 程序集所需的全部生成和配置設(shè)置;一個 Visual Studio .NET 解決方案包含一個或多個 Visual Studio .NET 項目并定義項目依賴關(guān)系、生成過程和順序;或包含一個項目計劃,該計劃用于從一組要求進(jìn)行生成。
有關(guān)創(chuàng)建和管理團(tuán)隊項目的更多信息,請參見“創(chuàng)建和管理團(tuán)隊項目”MSDN 庫頁面 (bit.ly/eCP0yX)。
讓我們討論一下將項目計劃組織到團(tuán)隊項目中時的注意事項。 團(tuán)隊項目常常包含與開發(fā)單個產(chǎn)品或產(chǎn)品系列關(guān)聯(lián)的最大工作單元。 例如,在 Microsoft 產(chǎn)品中,Visual Studio 和 Office 是兩個產(chǎn)品系列,每個產(chǎn)品系列都包含在其自身的單獨(dú)團(tuán)隊項目中(請參見圖 1),因?yàn)檫@兩個產(chǎn)品系列的開發(fā)是按照完全不同的日程表進(jìn)行的,并具有各自的里程碑和發(fā)布計劃。

圖 1 Visual Studio 和 Office 團(tuán)隊項目
注意配置問題和安全隔離十分重要。 創(chuàng)建新的團(tuán)隊項目過程中最費(fèi)時的一項工作是對項目進(jìn)行配置以便它由一個或更多團(tuán)隊使用,主要通過定義安全用戶、組和權(quán)限來控制對團(tuán)隊項目及其產(chǎn)物的訪問。需要針對在正確粒度級別上正確定義安全性的利益對這種配置工作進(jìn)行平衡,以便讓團(tuán)隊中的成員能夠完成他們需要 完成的工作。 同時,正確的安全配置可以防止不應(yīng)該執(zhí)行某些任務(wù)的人員無意間或故意對團(tuán)隊項目及其資產(chǎn)其造成損壞。
對于具有不同里程碑和發(fā)布計劃的產(chǎn)品系列(如 Visual Studio 和 Office),合理的做法是將每個產(chǎn)品系列組織為獨(dú)立團(tuán)隊項目以實(shí)現(xiàn)安全隔離。 與每個產(chǎn)品系列相關(guān)聯(lián)的開發(fā)團(tuán)隊可能是完全分開的,他們不大可能需要和被授予兩個團(tuán)隊環(huán)境中的參與和生成權(quán)限。
對于使用不同方法的項目計劃(例如,一個團(tuán)隊選擇使用 Microsoft Solutions Framework (MSF) 開發(fā) Agile Software Development 5.0 版,而另一個團(tuán)隊選擇使用 Microsoft Solutions Framework (MSF) for Agile Software Development 5.0 版),這就需要兩個獨(dú)立的團(tuán)隊項目,因?yàn)橐粋€給定團(tuán)隊項目有且只有一個與之關(guān)聯(lián)的過程模板。
對于需要“區(qū)域”和“迭代”的唯一定義的項目計劃,建議將團(tuán)隊項目分開,因?yàn)橐粋€給定團(tuán)隊項目只定義一個區(qū)域和迭代層次結(jié)構(gòu)。 或者,一個團(tuán)隊項目可以使用區(qū)域來組織多個功能團(tuán)隊(請參見圖 2),這些功能團(tuán)隊共享相同的迭代(請參見圖 3)。 另請參見由 Martin Hinshelwood 撰寫的文章“使用 Team Foundation Server 2010 創(chuàng)建項目”(在 bit.ly/hSnHGw 上),該文章討論了使用區(qū)域而不是具有許多小型團(tuán)隊項目的方案。

圖 2 使用區(qū)域來組織單獨(dú)功能團(tuán)隊的團(tuán)隊項目

圖 3 多個功能團(tuán)隊共享迭代層次結(jié)構(gòu)的團(tuán)隊項目
版本控制簽出設(shè)置(例如,獨(dú)占簽出、簽入策略和簽入說明)是為某個團(tuán)隊項目定義的,并且這些設(shè)置不跨越團(tuán)隊項目邊界共享。 如果分開的項目計劃需要不同的源代碼管理設(shè)置,則這些項目計劃必須與單獨(dú)的團(tuán)隊項目相關(guān)聯(lián)。
過程模板自定義包括已自定義(或自定義)工作流、工作項類型 (WIT)、報告和查詢。 您可以自定義用于創(chuàng)建新團(tuán)隊項目的過程模板,或自定義由某個團(tuán)隊項目使用的特定過程模板,這種特定過程模板不會跨多個團(tuán)隊項目共享。
共享團(tuán)隊項目產(chǎn)物通常是通過從一個團(tuán)隊項目分支到另一個團(tuán)隊項目實(shí)現(xiàn)的。 在前一篇文章中,我們討論了共享公共代碼的各種方法,其中很多方法都涉及到分支。
您可以看到,決定分開的項目或項目計劃是可以共享相同的團(tuán)隊項目還是必須與不同的團(tuán)隊項目相關(guān)聯(lián)需要考慮很多因素。 您應(yīng)考慮各種因素,并做出最適合您的組織的團(tuán)隊項目組織決定。
Visual Studio 團(tuán)隊項目集合
雖然團(tuán)隊項目在一定程度上是相互獨(dú)立的,但在 TFS 2005 和 TFS 2008 中,某些維護(hù)活動(例如,將多個 TFS 服務(wù)器合并為一個服務(wù)器)在過去是很難實(shí)現(xiàn)的。 并且,組織內(nèi)的獨(dú)立業(yè)務(wù)部門只能通過在組織內(nèi)實(shí)現(xiàn)兩個或更多 TFS 服務(wù)器來取得組織隔離,這就提高了基礎(chǔ)結(jié)構(gòu)成本,增加了維護(hù)和整體復(fù)雜性。
Visual Studio 2010 引入了團(tuán)隊項目集合。 每個 TFS 服務(wù)器可以有一個或更多團(tuán)隊項目集合。 反過來,一個團(tuán)隊項目集合包含一個或更多團(tuán)隊項目。 團(tuán)隊項目集合是 TFS 的基本恢復(fù)單位。 從備份和還原的角度看,團(tuán)隊項目集合與 SharePoint 站點(diǎn)集合類似。
Visual Studio 2010 快速參考指南項目 (vs2010quickref.codeplex.com) 提供了快速參考海報,可幫助您計劃新團(tuán)隊項目集合功能和團(tuán)隊項目。 團(tuán)隊項目集合提供了更具可伸縮性的 TFS 服務(wù)器部署。 在 TFS 2010 中,一個團(tuán)隊項目集合大致相當(dāng)于 TFS 2005 或 TFS 2008 中的一個 TFS 服務(wù)器。 有關(guān)創(chuàng)建和管理團(tuán)隊項目集合的更多信息,請參見 msdn.microsoft.com\library\dd236915。
將團(tuán)隊項目隔離為獨(dú)立團(tuán)隊項目集合時的注意事項包括可伸縮性、備份、恢復(fù)、安全隔離以及在團(tuán)隊項目間共享信息。
利用通常與數(shù)據(jù)庫環(huán)境相關(guān)聯(lián)的可伸縮性和負(fù)載平衡基礎(chǔ)結(jié)構(gòu),團(tuán)隊項目集合能夠在物理 SQL 服務(wù)器和 SQL 服務(wù)器實(shí)例之間實(shí)現(xiàn)負(fù)載平衡,從而為 TFS 服務(wù)器的可伸縮性提供支持。 如果您能夠在 SQL 服務(wù)器之間實(shí)現(xiàn)負(fù)載平衡,就可獲益于將團(tuán)隊項目拆分成多個團(tuán)隊項目集合。
如前所述,TFS 的基本恢復(fù)單位是團(tuán)隊項目集合。 不能對團(tuán)隊項目單獨(dú)進(jìn)行備份或還原。 如果您需要粒度備份和恢復(fù)功能(例如,如果您不想恢復(fù)一個以上團(tuán)隊項目),則將團(tuán)隊項目隔離為獨(dú)立的團(tuán)隊項目集合以便進(jìn)行備份和恢復(fù)會使您的組織獲益。
如果要以適當(dāng)?shù)目刂瞥潭群土6日_管理團(tuán)隊項目集合的安全設(shè)置,則可能會比較耗時。 在添加新的團(tuán)隊項目集合時,必須考慮用于設(shè)置每個集合的初始和后續(xù)工作。 如果在一個 TFS 服務(wù)器上管理的團(tuán)隊項目的項目團(tuán)隊具有不同的安全要求,則出于安全原因?qū)F(tuán)隊項目隔離為獨(dú)立的團(tuán)隊項目集合會讓您受益。
另一方面,如果在一個 TFS 服務(wù)器上管理的團(tuán)隊項目的項目團(tuán)隊不需要安全隔離,則讓組織的團(tuán)隊項目位于同一個團(tuán)隊項目集合中會使組織受益(請參見圖 4)。

圖 4 團(tuán)隊項目集合共享和隔離邊界
雖然可以在相同團(tuán)隊項目集合中的團(tuán)隊項目間實(shí)現(xiàn)產(chǎn)物(如源代碼文件)共享,但這些產(chǎn)物不能跨越團(tuán)隊項目集合邊界共享(請參見圖 4)。 如果兩個團(tuán)隊項目必須共享產(chǎn)物,則他們必須位于同一團(tuán)隊項目集合中。
有關(guān)使用團(tuán)隊項目集合來共享和隔離源代碼并進(jìn)行分支和合并的討論不在本文范圍之內(nèi)。 建議您參考tfsbranchingguideiii.codeplex.com 以了解今后的指南中包含的相關(guān)討論和信息。
團(tuán)隊項目存檔策略
定期維護(hù)必不可少,因?yàn)?TFS 環(huán)境從來不能安裝在無限制的物理資源上。 管理員需要計劃定期維護(hù)以存檔完整的項目數(shù)據(jù)并釋放服務(wù)器上壓力,以免開發(fā)團(tuán)隊遇到性能問題。
Rangers 升級指南 (vs2010upgradeguide.codeplex.com) 定義了一些可能的策略以作為升級指南的一部分,這些策略與 Microsoft 咨詢服務(wù)已開發(fā)的過程類似(請參見圖 5):

圖 5 可能的存檔策略
- 首先制作團(tuán)隊項目集合的副本。
- 從新克隆的存檔團(tuán)隊項目集合中刪除活動的團(tuán)隊項目(使用 TFSDeleteProject 命令行實(shí)用工具)。
- 從原始(活動)團(tuán)隊項目集合中刪除存檔的項目。
- 然后,可以將新的團(tuán)隊項目集合存儲至外部介質(zhì)上(例如,磁帶或閃存),再從硬盤將其刪除。 如果對系統(tǒng)進(jìn)行審核,則很容易將存檔介質(zhì)還原。
- 分離新的團(tuán)隊項目集合,以便以后輕松地重新獲取該集合。
從概念上看,此策略似乎并不重要,但確實(shí)需要一種策略來確定哪些團(tuán)隊項目可以存檔,而哪些不能。 請?zhí)貏e注意,在執(zhí)行 TFSDeleteProject 操作時,會將源代碼分支從系統(tǒng)中移除,并且這個事件是可以撤消的。
以下是用于存檔策略的建議:
- 為開發(fā)團(tuán)隊建立項目收尾策略以清理項目數(shù)據(jù)并將其存儲。 源代碼不是唯一需要保存的資料。 項目要求很有趣,但是它們的格式很可能不能重新使用,或者不能從其進(jìn)行增強(qiáng)。 功能規(guī)范需要與以前的功能規(guī)范混合才能反映產(chǎn)品在項目完成時處于生產(chǎn)條件下的狀態(tài)。 隨后,可以對該項目的要求進(jìn)行存檔,無需擔(dān)心數(shù)據(jù)丟失。 工作項不能像源代碼那樣從一個團(tuán)隊項目合并至另一個團(tuán)隊項目,因此,需要在項目完成后做出如何存儲完成的工作項的決定。
- 向所有團(tuán)隊發(fā)送標(biāo)準(zhǔn)要求,通知他們該事件之前有一個掛起的存檔操作,并列出針對該存檔的所有團(tuán)隊項目。
- 在每個團(tuán)隊項目中建立一個里程碑文件夾以作為完整項目計劃的最終項目數(shù)據(jù)的容器,包括要求列表、最終項目報告以及項目收尾時按正常方法策略存儲的全部文檔。
實(shí)質(zhì)上,若要成功進(jìn)行存檔,需要保留所有項目數(shù)據(jù),而不僅僅是保留源代碼。
為了對某個業(yè)務(wù)部門可能分離為兩個或更多管理實(shí)體做出響應(yīng),需要拆分團(tuán)隊項目集合。 在這種情況下,雖然不會存檔任何團(tuán)隊項目,但將部署與用于存檔團(tuán)隊項目的方法類似的方法。 第二個團(tuán)隊項目集合必須要像原始團(tuán)隊項目集合那樣進(jìn)行處理,原因在于它現(xiàn)在需要獨(dú)立于原始團(tuán)隊項目集合的定期維護(hù)。
在團(tuán)隊項目集合間移動團(tuán)隊項目不太容易,并且一旦將集合拆分,就不能簡單地將其重新合并,因?yàn)橹荒軐⑿碌膱F(tuán)隊項目添加到集合中。 為了合并團(tuán)隊項目集合,需要使用 TFS API 獲得自定義代碼,以便將項目數(shù)據(jù)從一個集合復(fù)制到另一個集合。
雖然并未建議這樣做,但可使用 TFS 集成工具將團(tuán)隊項目合并成團(tuán)隊項目集合中,請參見 TFS 集成工具文檔 (bit.ly/9tHWdG)。
在以后的文章中,我們將研究 Rangers 如何使用 Visual Studio ALM 工具來應(yīng)對分布式敏捷團(tuán)隊管理所帶來的挑戰(zhàn)。