第228期 / October 5, 2016

研發新視界

分享到臉書!分享到維特!分享到噗浪!分享到Google+!分享到微博!轉寄友人友善列印

開發團隊的最佳第六人:TFS自動組建與組態管理員

作者/蔡竣富

[發表日期:2016/10/5]

對於專案軟體開發而言,除了時程的掌握,最重要的就是軟體開發的程式碼產出及版本管理,Team Foundation Server是微軟所開發的版本控管工具,除了能夠自由簽入簽出和紀錄查詢等基本版控功能外,還有離線支援、物件項目整合、擱置集等額外功能,若能充分有效利用TFS的自動組建、部署的能力,無形中等於開發團隊額外多了一個人手,不但程式碼品質可以有所改善,同時也能夠提高開發效率,Work smart don't work hard !!
Microsoft Team Foundation Server 2015是微軟新推出的應用程式開發週期管理 (ALM) 解決方案的核心共同作業平台,擺脫傳統TFS 2010的操作模式,使用全新Web頁面進行瀏覽及控制設定(圖一),不僅提供人性化的操作,也支援Azure相關的資源建置,還可直接在網路上進行版本控管,可讓所有在集合裡的使用者看到任何版控或是建置訊息,提升開發團隊彼此間的合作默契。


<圖一>


自動建置:讓TFS成為最佳第六人

當開發團隊有許多人一同進行專案開發時,因為人為的錯誤發生建置失敗的情況屢見不鮮,往往會浪費許多時間及人力進行建置問題的處理,對於開發的效率影響是不利的,我們可以利用TFS建立自動化建置的機制,提升整體的工作效率,以下為逐步的說明。

首先必須在Team Foundation Server 2015的伺服器上開啟XAML組件組態服務並安裝(圖二)。


<圖二>


在進行XAML組件服務組態精靈安裝的過程中,必須選取要設定組建服務的Team專案集合,而在建立的過程中若之前在舊的Team Foundation Server 2010已經有建立過組建服務的話,會詢問是否還原先前的狀態還是使用現有新的資源(圖三),開發團隊可自行決定要延用舊有設定或是重新設定新的建置組態。


<圖三>


在安裝完XAML組建服務組態後,就可以開始建立自動建置的組態,首先開啟Visual Studio 2015開發工具並連接Team Foundation Server 2015,在檢視的工具列中選擇Team Explorer,在Team Explorer首頁中選擇組建項目,可以看到組建的相關資訊,這時候在XAML組態定義的項目中按下新增組建定義,就可以開始建立自己的組建了(圖四)。


<圖四>


在命名完組建定義名稱後,接著開始設定自動建置的觸發程序,其觸發程序共有五個選項(圖五),觸發程序的差異如下:


<圖五>


1.手動-簽入不會觸發新組建:此選項並不會進行任何的組建觸發,必須靠使用者手動將建置排入佇列後,才會觸發該程序。

2.連續整合-建置每次簽入:每次修改程式,只要簽入變更時便自動將組建排入佇列,好處是每次簽入就能知道建置成功或失敗,並且知道是哪位開發者遷入所導致,能夠快速修正錯誤。但若開發團隊有許多開發者,不建議使用此選項,因為容易發生版本程式錯誤尚未修改,並且持續簽入檔案、持續觸發建置,造成程式版本不完全。

3.正在復原建置-累積簽入,直到前一次組建完成:若遷入的檔案是由組建定義建置,當遷入變更時會有限制的將此組建排入佇列,其限制是指當組建定義的流程已經在執行時,不會將新的組建排入佇列。

4.閘道簽入-只有在順利合併並建置提交的變更時,才會接受簽入:將組建做為版控的簽入檔案的品質管制,避免簽入會編譯失敗的程式碼,當開發人員簽入檔案時,該變更集會形成擱置集,建置伺服器會先與版控合併後再進行建置,若建置成功,則自動將擱置集簽入,反之則依然存放在擱置集。

5.排程-每周於下列日子建置:自行建立組建排程,選擇要執行組建的星期與時間即可,建議小型開發團隊可使用此組建,於每段時間進行建置,方便了解現有版控是否有誤。

觸發程序的選擇會根據團隊的開發模式有所不同,若團隊常常進行版本的簽入簽出,並不建議使用連續整合,因為持續的啟動建置程序會造成Build Server的負擔,可選擇手動觸發或是排程觸發來進行,而排程觸發的優點是可以選擇日期及時間來進行,方便假日期間進行專案版本的檢查。
選定觸發程序後,接著進行來源設定(圖六),在來源設定中可以看到兩個選取資料夾,一個是原始檔控制資料夾,這邊選擇要執行自動建置方案所對應到的TFS工作區,而組建代理程式資料夾則是組建進行建置輸出對應的資料夾。


<圖六>


要特別注意的是,組建代理程式資料夾指的是在Team Foundation Server機器上的資料夾,並非使用者自己所使用的本機資料夾,若選擇錯誤的話,在進行自動建置時,會發生組建錯誤的情況(圖七)。


<圖七>


來源設定完成之後,便開始選擇組建預設值(圖八),在組建控制器中可以選擇要執行建置的控制器,必須注意該控制器是否為離線,若顯示離線必須在Team Foundation Server中開啟該控制器,選擇完組建控制器後再設定預設環境位置,若選擇『這個組建不會將輸出檔案複製到置放資料夾』的選項,則建置成功時並不會輸出檔案複製,若選擇『將組建輸出複製到下列置放資料夾』時,一旦建置成功時,則檔案會複製到使用者輸入的路徑下,此功能適合用來進行開發機的測試,當程式簽入後進行自動建置,若正確無誤便將檔案複製到對應的測試機資料夾中,可以馬上進行功能測試。


<圖八>


最後一個步驟為流程設定(圖九),使用者可以選擇要建置的專案和組態,我們可以自行編譯組建的編號格式,通常是專案名稱加上年月日及版本號,其原因是避免輸出編號格式相同,若輸出編號格式相同,自動建置會發生錯誤。


<圖九>


當組建設定完成後,便可開始執行自動建置的組建觸發,組建觸發後便會開始執行上面所設定的組建流程,當組建執行成功後會顯示建置已成功(圖十),並且顯示摘要訊息,如簽入的使用者、相關版號和時間等資訊,一切全部都自動化了,是不是省卻了許多力人呢?我們又朝美好的世界邁進了一小步!


<圖十>


環境組態小幫手:組態管理員

組態管理員是一種非常好用的方案管理工具,很多時候我們在進行開發時會因為環境的不同,像是開發、測試、上線等環境,不同的環境就必須修改不同的參數與設定,不僅程序繁雜、修改費時,萬一忘記修改很容易造成環境參數錯誤,導致系統異常。這時候就可以使用組態管理員的方案組態快速進行切換,以達成我們的目的。

在Visual Studio 2015軟體開發工具中的功能列上方,可以看見現有方案及專案的組態(圖十一),若沒有進行新增或修改通常都是兩種組態,分別是Debug和Release兩種。

一般Debug通常都是進行測試開發時所使用的編譯組建,在編譯組建時並不會對組建最佳化,而使用Debug的好處是可自行在Debug的模式下進行程式測試,在開發的程式中加上#if DEBUG的語法,如此一來當選擇在Debug模式下執行程式作業時,系統會判別是否為Debug模式,進入#if DEBUG語法的判斷條件;而Release則是在編譯組件時會對組建最佳化,並且忽略#if DEBUG的判斷。


<圖十一>


除了Debug及Release兩種組態之外,我們也可以自行新增想要編輯的組態,在組態管理員的「使用中的方案組態」選項中選取「新增」(圖十二),命名該組態的名稱後並選擇「複製設定值來源」,確定後就會建立新的方案組態。


<圖十二>


建立完新的方案組態後之後,到專案中的Web.Config檔案(圖十三),按下右鍵選擇『新增設定轉換』選項後,Web.Config底下會自動新增剛剛所建立的組態的Config檔案。


<圖十三>


接著我們可以在該Web.Config檔案進行編輯,比照現有的Web.Config看有哪些是需要做修正的,一般來說通常都是DB的連線字串需要進行修改,像是上線機與測試機的DB和使用者就不會一樣,常常在發行上版時都要修改Web.Config的參數,除了容易忘記修改之外,有時還會不小心改錯,造成系統出現問題。

為了避免這些問題的發生,我們可以在新增的組建Web.Config中加入Transform語法,利用Transform與Locator兩種屬性來進行Web.Config的編輯,以DB的ConnectionStrings來說,我們在Test組態的Config加入現有Web.Config中有的ConnectionStrings(圖十四),並修改Data Source的連線位置和使用者名稱,最後加入Transform和Locator的屬性及相關參數即可。


<圖十四>


修改完自定義的Web.Config後,可以利用Visual Studio 2015的預覽和轉換功能來比較使用該組態後的Web.Config是否變更為自行設定的參數(圖十五),可以利用此功能來進行檢查。


<圖十五>


從結果(圖十六)可以看到我們在Test組態所設定的DB連線取代了現有Web.Config的DB連線字串。


<圖十六>


當然除了可以修改ConnectionStrings外,若專案是呼叫WCF的服務,也可以在這邊進行參數和路徑修改(圖十七),還可以隨著環境不同而新增WCF服務端點,將Transform屬性改為Insert就可以新增,若沒指定Insert之後的位置,通常會加到最後一列,其結果如圖十八。


<圖十七>



<圖十八>


除了Web.Config之外,若開發團隊有引用其他的App.Config,也可以做到上述的組態參數設定,但是必須先到Visual Studio的『擴充功能和更新』下載SlowCheetah –XML Transforms(圖十九)並安裝。


<圖十九>


安裝完之後,可以發現在自行新增的Config檔案中,出現了Add Transform的功能選項(圖二十),按下去之後可以看到相關的組態Config檔案都出現了,因此可以重複上面敘述過的方法,利用Web.Config的Transform語法進行相同的參數設定。


<圖二十>


如此一來開發團隊在進行版本發佈時,就不需要隨著環境的不同而修改對應的Config路徑檔,只要選擇正確的環境組態,即可進行環境佈署。

結論

現在軟體開發講求的是團隊合作和高效率,所以如何讓開發團隊的成員在專心的開發軟體,而不被一些建置失敗等旁枝末節的問題所干擾。利用TFS自動建置的功能,能夠在檔案簽入時馬上發現到錯誤並加以修正,自動的整合組建,可以隨時發現團隊成員時簽入程式碼的異常,還能將組建完的軟體利用組態管理員機制,發佈正確的參數檔案至開發或測試環境,QA人員可以直接進行測試。

在工業4.0的時代,凡事追求生產效率和自動化,軟體工業不也應該要朝向這樣的方向齊步邁進。

(本文轉載自RUN!PC)

參考資料

1.Microsoft

2.
Visual Studio MSDN

3.資策會

4.http://kevintsengtw.blogspot.tw/2014/08/webconfig.html#.U-MWfPmSwZk

5.https://dotblogs.com.tw/yc421206/archive/2010/12/06/19944.aspx

6.https://dotblogs.com.tw/terrychuang/2011/11/11/56958