如何利用Azure DevOps快速實現自動化構建、測試、打包及部署

前兩天有朋友問我,微軟的Azure好用嗎,適不適合國人的使用習慣,我就跟他講了下,Azue很好用,這也是爲何微軟雲營收一直漲漲漲的緣由,基本能夠再1個小時內實現自動化構建、打包以及部署到Azure服務器上。利用週末的時間,寫了這篇文章,分享給你們,但願能幫助一些人快速入手如何使用Azure DevOps自動化構建、測試以及部署本身的服務。git

今天,我給你們一步一步詳細介紹,如何在1個小時內,建立一個Web API項目,實現服務的自動化構建、打包,並自動化部署到Azure上。web

1. 建立一個Azure託管存儲庫 (Organization)

第一步,須要在Azure DevOps (https://dev.azure.com/)上建立一個組織團體(Organization)。服務器

Organization能夠理解爲是一個公司(或者一個事業羣)或某個機構的全部數據的統一存儲庫,微軟稱之爲託管存儲庫。網絡

Host 項目的地區選擇一個最近的區域最好,減小網絡延遲。app

 

2. 建立一個新的Azure DevOps項目(Project)

  Azure DevOps Project 通常是一個大組或者一個大的週期內共同使用的一個數據及代碼集合。你在建立項目時,能夠設置項目名稱以及項目具體的介紹;也能夠選擇項目的可見性,能夠設置爲公開的或者私有的。版本控制能夠選擇默認的Git。單元測試

  其餘選項(例如,工做項處理的模板等),有興趣的能夠本身研究,這裏不作重點介紹。測試

  

3. 建立一個新的代碼倉庫(Repository)

  Repository 顧名思義就是存放代碼的地方, 一個Repo 能夠有不少個分支,通常默認爲master分支。 網站

 

在這裏,咱們建立一個名叫AzureWebApps的Repository,而且假設咱們以VisualStudio爲IDE,選擇VisualStudio .ignore 文件模板。.ignore 文件裏配置了那些咱們歸入Git管理的文件。ui

 

4.  建立咱們的Web API項目,並進行修改。

  4.1 克隆代碼到本地spa

  咱們先把上面建立的AzureWebApps Repo 克隆到本地,方便在本地對代碼進行增刪改。Azure DevOps 自己也提供了在線編輯Git Repo,通常一些微小的改動能夠直接在線修改。

 

打開Visual Studio,鏈接到咱們的託管存儲庫,並定位到咱們所建立的代碼倉庫(AzureWebApps),點擊「克隆」便可。

(你本機如未安裝Git,請自行到Git官網安裝Git,後面會用到。)

 

4.2 建立HelloAzure API網站。

接下來,咱們在VS裏來建立一個Web API project。

新建項目模板時,咱們選擇「Asp.Net Core Web 應用程序」模板,以下:

而後下一步,咱們選擇API的ASP.NET Core Web API: 

 

當咱們建立完項目後,默認的API Project是一個隨機返回天氣預報信息的API。 咱們能夠任意修好一些配置,如端口,打包輸出位置,對象類型及屬性等。我在這裏簡單加了一個Source 屬性給WeatherForecase.cs. 

 

5. 建立一個構建管道(Build Pipeline)

  此構建管道(Build Pipeline)的做用就是:每當咱們有代碼更新(Push)到遠程master分支時,它會自動用來自動構建,(自動測試,這裏略過),自動打包生成Artifacts 供後面自動部署管道使用。

  5.1 建立構建管道 (BuildAndPublishHelloAzure)

  咱們在Pipelines 頁面,新建一個Pipeline, 並選擇鏈接到「Azure Repos Git」 做爲代碼倉庫位置,以下圖:

接着,選擇咱們上面存放代碼的代碼倉庫(Repository) - AzureWebApps:

 接下來,咱們來進行初始化配置咱們的構建管道(Build Pipeline)。咱們給他配置上一個默認的任務(Task)- ASP.Net Core (.NET Framework) , 此Task 會利用VS Build來自動編譯.sln 及 .csproj的項目。

 

這裏我簡單介紹下,Azure的一個Pipeline 通常是包含多個任務(Task), 每一個任務(Task)是一個最小的運行單元。Azure 市場(Market place)上有不少現成的task 模板能夠供我們直接使用,只需簡單的配置一些參數便可。

由於咱們須要把編譯構建HelloAzure的結果包發佈到Azure上的某個地方,所以咱們須要給咱們的Build Pipeline 加一個任務 Publish build artifacts (直接在搜索框裏搜‘publish build’):

Publish build artifacts 任務有三個參數,咱們保持默認就能夠。 請注意,其中Artifact name (drop) 在後面配置部署管道時會用到。

點擊添加完後,我們就會在左邊的YAML Settings 裏看到咱們新加的這個任務的設置了,若是須要的話,能夠進行修改。最後咱們保存咱們配置好的構建管道。

保存後,咱們能夠把咱們的管道重命名成一個更有意義的名字,如 BuildAndPublishHelloAzure :

5.2 配置自動化(持續性)構建

構建管道建立好了,接下來咱們須要給咱們的Repository配置如何自動化構建。

咱們的需求是,若是master 分支有代碼更新(包括新建Pull Request, Complete Code/Push),那麼就自動運行咱們BuildAndPublishHelloAzure Pipeline。

首先咱們在分支頁面,找到Master 分支的分支策略管理頁面,添加一個構建策略:

新建的構建策略的配置頁面,觸發一項咱們選」Automatic「,這樣每當有新的PullRequest 建立時,就會自動綁定此BuildAndPublishHelloAzure Pipeline 進行編譯,構建,跑單元測試等。 

 最後,咱們須要在配置,當有代碼check in (PullRequest Complete)後,也自動運行這個build Pipeline。

在BuildAndPublishHelloAzure 編輯頁面,跳到Triggers(觸發器)這個配置tab頁面,咱們勾上並選中「Enable continuous integration」 便可,通常咱們只須要對特定的一些分支設置持續性集成構建測試,因此我這裏也只設置了master 分支。

到此,自動化的持續性集成構建 (測試)及打包已經完成了。

6. 在Azure上建立一個Web APP (Web API) 網站

6.1 建立Azure訂閱(Subscription)

在建立Web 網站以前,咱們須要建立一個Azure 訂閱(Subscription,Azure用來收費的帳戶,若是你已經有了,可跳過)。登陸www.azure.com, 用微軟帳戶登陸,在門戶頁面建立一個subscription,以下:

 

6.2 建立HelloAzure Web API Application

在Azure Portal (門戶)的搜索框裏搜」Api app「, 就回出來 API App 的一個建立模板,點擊它開始建立:

配置好你的網站名字 - JasonHelloAzure,並選擇上一步建立的訂閱(Azure subsciption - Jason Test) ,其餘默認便可。

接下來咱們將介紹若是將自動化構建生成好的包部署到咱們建立的這個API 網站(JasonHelloAzure)上。

 

7. 建立一個發佈管道(Release Pipeline)

  此發佈管道(Release Pipeline)的做用就是:每當咱們有代碼更新(Push)後並已經打包好後,此管道會自動將構建管道生成的Artifacts 自動部署到Azure Web App (JasonHelloAzure)。

7.1 建立發佈管道HelloAzureReleasePipeline

咱們在Releases 頻道,新建一個Release Pipeline, 並選擇鏈接到「Azure Repos Git」 做爲代碼倉庫位置,以下

 

新建是,會彈出來讓你選擇一個模板(以下圖),咱們這能夠選擇」Azure App Service deployment「, 這個模板適用於全部Azure Web app及其餘一些app (如containers 部署,Azure Function apps等):

 

如今咱們來給這個部署管道設置部署的來源,點擊Artifacs這個模塊,在右邊會彈出來配置的頁面:

Project 就是咱們第二不建立的項目,也是存放咱們建立的構建管道的地方。

Source (build pipeline),選擇咱們建立的BuildAndPublishHelloAzure 管道。

默認版本(Default Vesion),選擇Latest便可,意思是每當上面的BuildAndPublishHelloAzure管道的最新發布的包。

Source alias, 就是包名的意思,在配置BuildAndPublishHelloAzure構建管道時,有一步配置Artifacts name 配置的就是 "drop」, 這裏只需先後配置一致便可,任意字符串均可以。

 

7.2 配置自動化持續性部署

如今咱們來給部署管道配置持續性部署觸發(Continuous deployment trigger), 這個意味着,每當有新的artifacts 包生成時,就自動觸發這個部署管道進行部署。

點擊Artifacts 模塊裏的那個小閃電button, 右邊就會出來持續性部署觸發器的配置頁面。

選擇一個master 分支,啓用Continue deployment trigger, 以下圖:

最後一步,咱們來配置部署管道要部署的目的地,也就是配置到咱們上面建立好的Azure API App (JasonHelloAzure)。

一個部署管道也跟構建管道相似,區別是他包含多個階段(Stage),一個階段又包含任務(Task)。

點擊任務選項組(Tasks),在右邊的配置頁裏,填好階段名稱,選擇訂閱名稱(Azure subscription - Jason Test)。

App type, 因爲咱們建立的是API App,天然選擇API App, 選了API App 後,最後的App service name下拉框就會出現全部該訂閱下面的API App, 咱們選擇JasonHelloAzure及可。

 Deploy Azure App Service 任務的配置,咱們保持默認便可。

 

8. 測試結果與總結

8.1 效果展現

咱們直接先手動運行下建立好的「HelloAzureReleasePipeline」部署管道,而後訪問JasonHelloAzure API 網站,以下:

 

最後,咱們來試試自動化部署,看看效果(成果)哈 :)

咱們建立一個Pull Request, 那麼自動跑咱們配置好的CodeBuild Policy (其實就是跑BuildAndPublishHelloAzure Pipeline)

 

當Pull Request Complete 後, 會自動跑持續性構建管道,以及部署管道:

約3分鐘後,部署完成,再次訪問JasonHelloAzure API: https://jasonhelloazure.azurewebsites.net/weatherforecast , 結果已經更新:

但願對想用Azure DevOps 對本身的服務作自動化CI/CD的人有幫助。

本文沒有重點介紹測試部分,能夠直接給HelloAzure建立一個UnitTest Project,BuildAndPublishPipelline 能夠增長一個跑單元測試的任務便可以實現自動化構建+測試了。

8.2 總結

Azure DevOps 總體仍是很人性好的,在易用性和可擴展性方面確實作的不錯。對於一些中小企業,仍是一個不錯的選擇,可讓研發人員專一於業務邏輯,省去了一些CI/CD的繁雜雜事。微軟Azure部門能夠說是最具備互聯網基因的事業羣了,Azure的產品同時也有了互聯網的敏捷性和易用性,這也是微軟股價持續新高,被華爾街看好的緣由。

相關文章
相關標籤/搜索