Share via


雲端佈署專案及自動化過版 - 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 (將佈署環境設定變成代碼,方便自動化及重建環境) 。透過這些新功能,將更能掌握現今的開發流程及方法。

 

為了導入 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) 核准後,才能繼續後續的佈署作業。