作者 - 胡百敬 (微軟MVP)
文章出处:http://blogs.msdn.com/b/msdntaiwan/archive/2013/09/10/inrelease-for-visual-studio-2013.aspx
註 - InRelease 產品已於2013/11月正式發佈並改名為 Release Management for Visual Studio 2013
「發行管理(Release Management)」指得是部署軟體應用程式到多種執行環境的流程,如開發、測試、使用者驗收測試/教育訓練、正式等伺服器。其間需要測試所有面向的正確性,而後擇時部署到生產環境,並進行最後的驗證。
發行的過程需包括開發、測試/品管、管理團隊與使用者間的協同作業,以確保應用程式按時且有品質地交付給客戶。「發行管理」的目的就是改善這些角色間的溝通,讓開發出的各版本軟體能快速、簡單、可靠、重複、並符合稽核與法規的要求完成部署。
持續交付需要自動化部署
我們希望從Team Foundation Server(TFS)發行最新版本的應用程式到所有環境,讓團隊裡的各種角色可以參與,儘快地滿足客戶。然而如果是手動發行,則很可能浪費時間和精力在 發行週期的複雜性,從簡單的通知、確認,到複雜的備份、刪除、複製、安裝、設定、安裝失敗的還原…等作業。
而這個流程在開發過程中一再地發生,尤其對採用敏捷(Agile)開發的團隊而言,更是日常的工作。例如:每日組建後,部署到開發伺服器,驗證無誤 後部署到測試環境,每個星期部署到使用者接受度測試環境,每兩個星期部署到正式環境。若不能自動化,這流程將耗時費事,還損傷團隊的精力,每每要團隊成員 細心耐心地完成每個階段的部署。
對於採用 .NET/Visual Studio 和 TFS 的團隊,已經存在「組建-部署-測試」流程,支援持續交付的解決方案。然而,當下的平台尚缺乏易上手的發行管理機制,較難滿足以下的需求。
- 手動發行耗時且容易出錯:現今應用程式的組成與架構都複雜,需要更專注細節。重複性工作和繁複的步驟,容易疏忽而發生人為錯誤,且難以維護。一旦出錯往往需要不同團隊成員間的大量協調和溝通,收集錯誤紀錄並研究原因。
隨著開發週期變短,更頻繁地引進新技術、產品、做法,導致不僅經常的部署,且部署到研發、測試和執行應用程式的環境還常變更,讓手動執行部署工作變成負荷。
若部署正式環境要一次到位,就算出問題也不至於手忙腳亂,除要有與正式環境一模一樣的使用者驗收測試/教育訓練環境外,多次的部署除可驗證上線流程外,也可讓相關人員熟能生巧,在關鍵時刻才能從容不迫。
- 手動發行影響軟體品質:接續上一點,若部署和發行耗損了大量開發團隊的精力與時間,將傷及測試和除錯的資源,自然也降低了產品的品質。發行成本較高也意味著較少部署到不同進程的環境,以擷取錯誤和問題。導致日後再修復的費用較高,增加技術債務。
- 許多關鍵關係人有不同的目標,需要協同作業流程:當部署到不同階段的環境時,把關的角色可能不同,驗證的重點也不同。開發、測試、使用者等各團隊需要依自己需求,確認部署的進程,是否可以進入到下一階段。
- 符合法規:在較為嚴謹的產業,會要求部署能被授權、審核與稽查,有固定的流程,不可任意執行。
微軟公司日前(2013/6)收購了InCycle公司出品的InRelease產品,可以與TFS整合,自動部署應用程式組件到各種目標伺服器所 在的異質環境中。這些組件在各種伺服器上可能需要不同的配置,例如目錄檔案、資料庫連接、註冊機碼…等,但我們仍希望採用相同的部署封裝,讓發行管理平台 來處理其中的差異。另一個關鍵是集中管理所有的設定,透過客製化的流程,發行到企業中多種的伺服器角色。
自動化發行的重點在於易出錯和重複性的作業。InRelease針對發行應用程式中涉及的所有手動工作,採集中 設定方式,可以定義每個應用程式、元件的發行路徑。InRelease不是建立 .msi或. exe 等安裝檔的解決方案。InRelease 將可與這些包裝工具或 .msi 或. exe 合作,自動化發行與追蹤複雜的部署工作。
整體而言,這補足了TFS平台所提供的軟體生命週期管理中的一角,如圖1所示:
圖1:透過InRelease讓整個軟體生命週期可以更快更順地循環
為了完成上述目標,InRelease提供四種主要的元件,如圖2所示:
圖2:InRelease組成元件與系統架構
分別說明圖2中各元件的用途如下:
- InRelease Server:伺服器元件是解決方案的核心,包括資料庫,工作流程控制和分派器,用以同步發行工作,並儲存流程進行的狀態。
- InRelease Client:有兩種前端工具,「IR Console」是以Windows Presentation Foundation(WPF)開發,提供所有InRelease應用程式的功能設定與管理,「IR Web」是瀏覽器介面,給測試者、使用者和管理人員驗收審核。
- InRelease Deployer:安裝在需要部署應用程式組件的目標伺服器。InRelease伺服器不會主動存取目標伺服器,所有操作都是部署者從InRelease伺服器提取(Pull)。
- Deployer Tools:InRelease的解決方案提供了各種不同的安裝工具程式,完成不同的部署需求,如卸載/安裝組件��部署報告到 SQL Server Reporting Services,以及將檔案移到特定位置…等。
InRelease的基本機制,是讓使用者藉由適合的介面(例如透過瀏覽器存取InRelease網站)與伺服器互動,觸發新的發行請求,或依發行路徑審核某個階段,啟動下一階段的部署要求。若部署失敗,可以遵照流程範本的定義將之還原。
以下簡單說明InRelease透過上述架構,如何滿足前述「組建-部署-測試」流程的需求。
流程自動化
InRelease 提供了可客製化工作流程,以管理每個階段的工作步驟。當我們在多個環境安裝好「InRelease Deployer」後,可以透過「IR Console」定義發行範本(Release Template),針對不同用途的執行環境,定義部署的工作流程,如圖3所示:
圖3:建立發行流程範本
大部分的工作都可以透過滑鼠從左方的「工具箱(Toolbox)」拖曳到右方的設計環境,賦予各項屬性設定值即可。而工具箱的內容,則可以在圖3的 「Inventory」頁籤內定義「Actions」和「Tools」。換句話說,你可以客製化在部署流程中所需的工具程式或批次指令。
協同作業
隨著應用程式版本的狀態變化,開發、測試、營運與使用者團隊間對系統的要求也會不同,為保證其發行已滿足某個階段的要求,可繼續發行到下一階段的伺服器,InRelease提供審核流程,讓各團隊成員自行決定部署的品質。其設定發行流程的審核與授權如圖4所示:
圖4:設定部署的認可與驗證
在此可以定義發行的階段,是否自動部署,驗收的人或團隊…等。當有新的軟體版本需要部署時,可以透過相同的管理介面啟動新的發行流程:
圖5:啟動新的發行流程,將新的軟體版本部署到特定的平台
各關的負責人確認該軟體在所管理的平台執行無誤後,可以透過如圖5的相同工具程式或網頁認可部署的成果,並繼續進入到下一關:
圖6:使用者簽核與認可部署的結果
點選網頁內的發行流程,可以檢閱該次發行各階段的狀態:
圖7:透過網頁檢視某個發行流程的各階段狀態
當然,若是透過WPF所撰寫的管理工具,可以看到更多的細節。
除了手動發行某個版本的軟體外,InRelease也可以與TFS整合,建立完整的「持續整合(Continuous Integration)」流程。
與TFS整合
InRelease可以搭配TFS的「團隊組建(Team Build)」流程,持續地將成功組建後的軟體發行到各個平台。其協同作業如圖8所示:
圖8:InRelease搭配TFS協同作業,完成「持續整合」流程
經由TFS的「團隊組建」流程可呼叫InRelease提供的工具程式,在完成組建後自動觸發部署流程,這僅需要在團隊組建流程範本設定組建完成後啟動發行即可,如圖9所示:
圖9:定義組建流程範本結合發行流程
兩者的結合其實很簡單,透過預設提供的「InReleaseDefaultTemplate」組建流程範本,在TFS提供的Workflow Foundation組建流程中呼叫InRelease提供的工具程式,InRelease即可從組建完成後的Drop目錄取得組建成果,並開始部署流 程。其流程範本的設計如圖10所示:
圖10:團隊組建流程透過呼叫InRelease提供的工具程式,在完成組建後自動觸發部署流程
TFS提供的團隊組建報告也可以呈現組建完成後,是否成功啟動發行流程:
圖11:透過組建報告可以檢視是否成功啟動發行流程
一旦完成組建,可以透過InRelease管理工具檢視整個發行平台,所有發行流程的統計資料,以及個別發行流程的進程,並管理這些發行流程:
圖12:藉由InRelease管理工具監控發行部署流程
透過InRelease管理工具可以知道發行流程是否已經走完,或是卡在哪一關以進一步了解問題所在。
「經常發行,發行儘早」是當下App商場的特徵,相信也會成為我們IT產業的常態。敏捷開發方法論期待整個軟體生命週期的順暢圓轉,要靠每一環都環環相扣,減低技術債務,增加整體透明度。「發行管理」是需要考量的一環,而善用工具將是團隊成熟度的指標之一。
參考資源:
l 下載 InRelease for Microsoft Visual Studio 2013 Preview版本:http://www.incyclesoftware.com/inrelease/inrelease-2013-preview/
l InCycle公司對InRelease產品的說明:http://www.incyclesoftware.com/inrelease/the-product/features/
l VS 2013 & TFS 2013 ALM 的試用環境與練習:http://blogs.msdn.com/b/briankel/archive/2013/08/02/visual- studio-2013-application-lifecycle-management-virtual-machine-and-hands-on-labs-demo-scripts.aspx