雲端佈署專案及自動化過版 - Cloud Deployment Projects and Release Management for DevOps

在這次 2014/11 月的 Connec()大會上,微軟發布多項新功能讓 DevOps (Development and Operations, 開發維運一體化) 更容易,包括 雲端佈署專案(Cloud Deployment Project) 及新版的Azure SDK,透過這些新功能,更容易地實現 infrastructure and configuration as code (將佈署環境設定變成代碼,方便自動化及重建環境) 。透過這些新功能,將更能掌握現今的開發流程及方法。

channel 9: Using Cloud Deployment Projects To Embrace Infrastructure & Configuration As Code

 

為了導入 DevOps 的開發流程及實務,將會著重三個重要步驟。首先為自動化建置及佈署 (automation of provisioning and configuration of deployments),透過 Visual Studio 的 Release Management 自動化過版的功能; 第二步驟由維運團隊 (Ops Team) 回饋資訊給開發團隊 (Dev Team) 包含: 監測、事件分析、系統問題處理... 等。最後,因應快速變化所需的軟體開發能力,將會採用精實軟體開發 (Lean software development)、「Build - Measure - Learn (開發﹣量測﹣學習)」循環機制及假設驅動的開發模式 (註: Hypothesis-driven development, 例如: 原本一個電子商務網站,網友將某個商品加入購物車的第一步會要求加入會員,研發團隊經過數據分析及研究,認為將網站的購物車改為第一步不用登入會員,會提高結帳率,因此做一些小規模的改版來實驗以驗證這個假設是對的,這類的開發方式在精實軟體開發上是很常見的。)

DevOps - 持續交付價值、並縮短這個週期,如下圖

這篇會著重解說如何提升軟體自動化建置及部署過程,以快速滿足客戶的需求。Visual Studio 2015 的 Cloud Deployment Project 這個功能,最大好處是: 想像一下一個大型系統的開發/測試/上線環境,重新再打造一個一模一樣的,要花多少時間? 現在透過 Cloud Deployment Project 的功能及 Azure,只需簡單的設定及按幾下按鍵,無需人工介入,就可以自動化且在數分鐘或數小時實現了! 在 DevOps 的實務中,將這功能稱為 "infrastructure and configuration as code", 或 "infrastructure as code",也就是將一個系統的執行環境定義及設定轉變成程式碼 (硬體有幾台 Server、每一台的RAM、CPU 大小;每一台機器上安裝了哪些軟體及相關的設定、或是用到哪些平台服務,將這些設定用程式文字檔來定義,且這些文字是很容易閱讀及編輯、更可透過雲端平台或工具的設定,達到高度的自動化重建或修改這些環境,就好像可以編譯及並重覆執行這些程式碼)

這張圖是ASP.NET MVC 解決方案包含許多不同的工作項目。現在我們將加入雲端部署的解決方案。(Cloud Deployment Project)

右鍵點擊「方案」新增「新專案」

在新增專案的視窗中,點選雲端部署專案 (Cloud Deployment Project) 範本 - 這樣的好處是,你先將專案的佈署定義先設定好,未來你可以很容易地重新佈署到新的雲端環境,或用自動化的方式重建這個環境

接著選擇範本精靈,Visual Studio會根據方案中的內容自動從內建的組建庫中挑選適合的範本

Visual Studio 會自動偵測網站及資料庫的項目部署狀態並替我們選擇適合的範本,不用由我們動手!

只要等候一下,雲端部署專案就會建置完成並套用至方案中。

在剛剛建置的雲端部署專案中,有三個相似的佈署拓樸 (Deployment Topology) 但是設定內容是有所差異的,名稱分別為 "Developer"、"QA"、"Production"; 分別代表了 "開發環境“、"QA 測試環境"、及"上線環境"。而佈署拓樸的定義是用 JSON 這樣的文件格式來描述。好處是 JSON 檔可以很容易的編輯修改,幫助你定義應用程式的佈署環境。

如果打開 "開發環境佈署拓樸" (Developer Deployment Topology) 的 JSON 檔案 (檔名 : MyShuttle-Developer.json),會發現了一個 ”小型” 的虛擬機器 ("vmSize" : "Small") ,而且所有的應用程序層只需要用到一台虛擬機器。在開發用途的環境上,這樣的機器設定已經能夠滿足我們的需求。當然你也可以修改 JSON 內容並調整這些設定,例如將這個開發環境修改一下,以利複製更多的環境。(註: 看到下圖中的 JSON 檔,用簡單的文字 - Key/Value pair 來定義佈署環境,讓修改佈署環境設定更快更自動化。)

此外,因為開啟了遠端偵錯功能 (remote debugging endpoints),我們可以在開發過程中使用偵錯工具。大家要注意: 通常在上線環境 (Production) 中是不會連接偵錯工具,但在開發環境中這麼做可讓開發者更方便地進行除錯。

我們可以發現實際上線環境 (Production) 的拓樸設定,使用了多台”中型”的虛擬機器 ("vmSize" : "Medium"),分別負責 database 及網站應用程式

現在讓我們來看看如何利用 Visual Studio 2015 中的 Environments hub (小組總管 Team Explorer 選單中的新功能,用來管理佈署環境) 來進行佈署。請注意,畫面中有些環境已經部署好了,也會顯示在這個視窗中

現在我們建立一個新的佈署 (New Deployment,如下圖),並且發佈在 Azure 的環境上,因為這個新環境已經與 Visual Studio Online 專案綁定,在未來可以重複使用,方便重新佈署應用程式、快速地將環境重現,並且開發及維運團隊可以共享。

我們必須選用一個 Azure 訂閱服務 (下圖例為 "DTL-QA"),並給虛擬機器一個獨一無二的名字

開發環境定義及 Azure 資料中心位置都已設定好,如果需要也可以與團隊一起共享這個環境 (好處是: 團隊其它成員也可以看到這些環境定義及設定; 當人員異動時方便交接,或是讓團隊成員了解佈署環境、或是重建這些佈署環境可以很快地實現,想像一下將一個大型系統的開發/測試/上線環境,重新再打造一個一模一樣的,要花多少時間? 現在透過 Visual Studio 2015 的 Cloud Deployment Project 的功能及 Azure,只需簡單的設定及按幾下按鍵,無需人工介入,就可以自動化且在數分鐘或數小時實現了!)

接著是要指定儲存帳戶,上傳需要的應用程式組件,而剛剛所指定的帳戶將會是部署過程中的臨時存儲位置。要存取Blob儲存體中的這些資訊都需要經過Token認證帳戶(共用存取簽章)才能有存取權限。

點選「開始部署」後即可開始部署作業。過程中會編譯本地端的應用程式並上傳至儲存帳戶,之後才會開始配置過程及啟用所需的Azure雲端資源,上述流程的部署作業會花費一點時間。

這張圖是現有環境中的部署,作業從開始到完成的時間點都會被完整記錄

 

在這次Connect()大會上,我們宣布之後將可以在 Visual Studio Online中使用Release Management 進行自動化部署。

之後,我們可以直接使用現有的 Build Definition (建置定義) 並於Visual Studio Online中使用自動化佈署

接著,將這些部署階段 (Release stage) 與剛剛設定好的環境相互連結 (例如發佈到上線環境 Prod 的這個階段,就選擇對映到 "MyShuttle-Prod" 這個環境) 

在 Visual Studio Online 中建立好部署的流程後,就可以使用 Release Management Client (如下圖) 進行應用程式發佈的進階設定。例如像是部署在進入下一個階段前,需先由一位 ”核准者" (Approver) 核准後,才能繼續後續的佈署作業。