利用Azure DevOps快速實(shí)現(xiàn)自動(dòng)化構(gòu)建、測(cè)試、打包及部署

來源: PM吃瓜
作者:妖怪C
時(shí)間:2021-09-26
18022
基本可以再1個(gè)小時(shí)內(nèi)實(shí)現(xiàn)自動(dòng)化構(gòu)建、打包以及部署到Azure服務(wù)器上。

基本可以再1個(gè)小時(shí)內(nèi)實(shí)現(xiàn)自動(dòng)化構(gòu)建、打包以及部署到Azure服務(wù)器上

1. 創(chuàng)建一個(gè)Azure托管存儲(chǔ)庫 (Organization)

第一步,需要在Azure DevOps (https://dev.azure.com/)上創(chuàng)建一個(gè)組織團(tuán)體(Organization)。

Organization可以理解為是一個(gè)公司(或者一個(gè)事業(yè)群)或某個(gè)機(jī)構(gòu)的所有數(shù)據(jù)的統(tǒng)一存儲(chǔ)庫,微軟稱之為托管存儲(chǔ)庫。

Host 項(xiàng)目的地區(qū)選擇一個(gè)最近的區(qū)域最好,減少網(wǎng)絡(luò)延遲。

2. 創(chuàng)建一個(gè)新的Azure DevOps項(xiàng)目(Project)

  Azure DevOps Project 一般是一個(gè)大組或者一個(gè)大的周期內(nèi)共同使用的一個(gè)數(shù)據(jù)及代碼集合。你在創(chuàng)建項(xiàng)目時(shí),可以設(shè)置項(xiàng)目名稱以及項(xiàng)目具體的介紹;也可以選擇項(xiàng)目的可見性,可以設(shè)置為公開的或者私有的。版本控制可以選擇默認(rèn)的Git。

3. 創(chuàng)建一個(gè)新的代碼倉(cāng)庫(Repository)

  Repository 顧名思義就是存放代碼的地方, 一個(gè)Repo 可以有很多個(gè)分支,一般默認(rèn)為master分支。

在這里,我們創(chuàng)建一個(gè)名叫AzureWebApps的Repository,并且假設(shè)我們以VisualStudio為IDE,選擇VisualStudio .ignore 文件模板。.ignore 文件里配置了那些我們納入Git管理的文件。

4.  創(chuàng)建我們的Web API項(xiàng)目,并進(jìn)行修改。

  4.1 克隆代碼到本地

  我們先把上面創(chuàng)建的AzureWebApps Repo 克隆到本地,方便在本地對(duì)代碼進(jìn)行增刪改。Azure DevOps 本身也提供了在線編輯Git Repo,一般一些微小的改動(dòng)可以直接在線修改。

打開Visual Studio,連接到我們的托管存儲(chǔ)庫,并定位到我們所創(chuàng)建的代碼倉(cāng)庫(AzureWebApps),點(diǎn)擊“克隆”即可。

4.2 創(chuàng)建HelloAzure API網(wǎng)站。

接下來,我們?cè)赩S里來創(chuàng)建一個(gè)Web API project。

新建項(xiàng)目模板時(shí),我們選擇“Asp.Net Core Web 應(yīng)用程序”模板,如下:

當(dāng)我們創(chuàng)建完項(xiàng)目后,默認(rèn)的API Project是一個(gè)隨機(jī)返回天氣預(yù)報(bào)信息的API。我們可以任意修好一些配置,如端口,打包輸出位置,對(duì)象類型及屬性等。我在這里簡(jiǎn)單加了一個(gè)Source 屬性給WeatherForecase.cs.

5. 創(chuàng)建一個(gè)構(gòu)建管道(Build Pipeline)

  此構(gòu)建管道(Build Pipeline)的作用就是:每當(dāng)我們有代碼更新(Push)到遠(yuǎn)程master分支時(shí),它會(huì)自動(dòng)用來自動(dòng)構(gòu)建,(自動(dòng)測(cè)試,這里略過),自動(dòng)打包生成Artifacts 供后面自動(dòng)部署管道使用。

  5.1 創(chuàng)建構(gòu)建管道 (BuildAndPublishHelloAzure)

  我們?cè)赑ipelines 頁面,新建一個(gè)Pipeline, 并選擇連接到“Azure Repos Git” 作為代碼倉(cāng)庫位置,如下圖:

接著,選擇我們上面存放代碼的代碼倉(cāng)庫(Repository) - AzureWebApps:

 接下來,我們來進(jìn)行初始化配置我們的構(gòu)建管道(Build Pipeline)。我們給他配置上一個(gè)默認(rèn)的任務(wù)(Task)- ASP.Net Core (.NET Framework) , 此Task 會(huì)利用VS Build來自動(dòng)編譯.sln 及 .csproj的項(xiàng)目。

這里我簡(jiǎn)單介紹下,Azure的一個(gè)Pipeline 一般是包含多個(gè)任務(wù)(Task), 每個(gè)任務(wù)(Task)是一個(gè)最小的運(yùn)行單元。Azure 市場(chǎng)(Market place)上有很多現(xiàn)成的task 模板可以供咱們直接使用,只需簡(jiǎn)單的配置一些參數(shù)即可。

因?yàn)槲覀冃枰丫幾g構(gòu)建HelloAzure的結(jié)果包發(fā)布到Azure上的某個(gè)地方,因此我們需要給我們的Build Pipeline 加一個(gè)任務(wù) Publish build artifacts (直接在搜索框里搜‘publish build’):

Publish build artifacts 任務(wù)有三個(gè)參數(shù),我們保持默認(rèn)就可以。請(qǐng)注意,其中Artifact name (drop) 在后面配置部署管道時(shí)會(huì)用到。

保存后,我們可以把我們的管道重命名成一個(gè)更有意義的名字,如 BuildAndPublishHelloAzure :

5.2 配置自動(dòng)化(持續(xù)性)構(gòu)建

構(gòu)建管道創(chuàng)建好了,接下來我們需要給我們的Repository配置如何自動(dòng)化構(gòu)建。

我們的需求是,如果master 分支有代碼更新(包括新建Pull Request, Complete Code/Push),那么就自動(dòng)運(yùn)行我們BuildAndPublishHelloAzure Pipeline。

首先我們?cè)诜种ы撁妫业組aster 分支的分支策略管理頁面,添加一個(gè)構(gòu)建策略:

新建的構(gòu)建策略的配置頁面,觸發(fā)一項(xiàng)我們選”Automatic“,這樣每當(dāng)有新的PullRequest 創(chuàng)建時(shí),就會(huì)自動(dòng)綁定此BuildAndPublishHelloAzure Pipeline 進(jìn)行編譯,構(gòu)建,跑單元測(cè)試等。 

最后,我們需要在配置,當(dāng)有代碼check in (PullRequest Complete)后,也自動(dòng)運(yùn)行這個(gè)build Pipeline。

在BuildAndPublishHelloAzure 編輯頁面,跳到Triggers(觸發(fā)器)這個(gè)配置tab頁面,我們勾上并選中“Enable continuous integration” 即可,一般我們只需要對(duì)特定的一些分支設(shè)置持續(xù)性集成構(gòu)建測(cè)試,所以我這里也只設(shè)置了master 分支。

到此,自動(dòng)化的持續(xù)性集成構(gòu)建 (測(cè)試)及打包已經(jīng)完成了。

6. 在Azure上創(chuàng)建一個(gè)Web APP (Web API) 網(wǎng)站

6.1 創(chuàng)建Azure訂閱(Subscription)

在創(chuàng)建Web 網(wǎng)站之前,我們需要?jiǎng)?chuàng)建一個(gè)Azure 訂閱(Subscription,Azure用來收費(fèi)的賬戶,如果你已經(jīng)有了,可跳過)。登錄www.azure.com, 用微軟賬戶登錄,在門戶頁面創(chuàng)建一個(gè)subscription,如下:

6.2 創(chuàng)建HelloAzure Web API Application

在Azure Portal (門戶)的搜索框里搜”Api app“, 就回出來 API App 的一個(gè)創(chuàng)建模板,點(diǎn)擊它開始創(chuàng)建:

配置好你的網(wǎng)站名字 - JasonHelloAzure,并選擇上一步創(chuàng)建的訂閱(Azure subsciption - Jason Test) ,其他默認(rèn)即可。

接下來我們將介紹如果將自動(dòng)化構(gòu)建生成好的包部署到我們創(chuàng)建的這個(gè)API 網(wǎng)站(JasonHelloAzure)上。

7. 創(chuàng)建一個(gè)發(fā)布【部署】管道(Release Pipeline)

  此發(fā)布管道(Release Pipeline)的作用就是:每當(dāng)我們有代碼更新(Push)后并已經(jīng)打包好后,此管道會(huì)自動(dòng)將構(gòu)建管道生成的Artifacts 自動(dòng)部署到Azure Web App (JasonHelloAzure)。

7.1 創(chuàng)建發(fā)布管道HelloAzureReleasePipeline

我們?cè)赗eleases 頻道,新建一個(gè)Release Pipeline, 并選擇連接到“Azure Repos Git” 作為代碼倉(cāng)庫位置,如下

新建是,會(huì)彈出來讓你選擇一個(gè)模板(如下圖),我們這可以選擇”Azure App Service deployment“, 這個(gè)模板適用于所有Azure Web app及其他一些app (如containers 部署,Azure Function apps等):

現(xiàn)在我們來給這個(gè)部署管道設(shè)置部署的來源,點(diǎn)擊Artifacs這個(gè)模塊,在右邊會(huì)彈出來配置的頁面:

Project 就是我們第二不創(chuàng)建的項(xiàng)目,也是存放我們創(chuàng)建的構(gòu)建管道的地方。

Source (build pipeline),選擇我們創(chuàng)建的BuildAndPublishHelloAzure 管道。

默認(rèn)版本(Default Vesion),選擇Latest即可,意思是每當(dāng)上面的BuildAndPublishHelloAzure管道的最新發(fā)布的包。

Source alias, 就是包名的意思,在配置BuildAndPublishHelloAzure構(gòu)建管道時(shí),有一步配置Artifacts name 配置的就是 "drop”, 這里只需前后配置一致即可,任意字符串都可以。

7.2 配置自動(dòng)化持續(xù)性部署

現(xiàn)在我們來給部署管道配置持續(xù)性部署觸發(fā)(Continuous deployment trigger), 這個(gè)意味著,每當(dāng)有新的artifacts 包生成時(shí),就自動(dòng)觸發(fā)這個(gè)部署管道進(jìn)行部署。

點(diǎn)擊Artifacts 模塊里的那個(gè)小閃電button, 右邊就會(huì)出來持續(xù)性部署觸發(fā)器的配置頁面。

選擇一個(gè)master 分支,啟用Continue deployment trigger, 如下圖:

最后一步,我們來配置部署管道要部署的目的地,也就是配置到我們上面創(chuàng)建好的Azure API App (JasonHelloAzure)。

一個(gè)部署管道也跟構(gòu)建管道類似,區(qū)別是他包含多個(gè)階段(Stage),一個(gè)階段又包含任務(wù)(Task)。

點(diǎn)擊任務(wù)選項(xiàng)組(Tasks),在右邊的配置頁里,填好階段名稱,選擇訂閱名稱(Azure subscription - Jason Test)。

App type, 由于我們創(chuàng)建的是API App,自然選擇API App, 選了API App 后,最后的App service name下拉框就會(huì)出現(xiàn)所有該訂閱下面的API App, 我們選擇JasonHelloAzure及可。

 Deploy Azure App Service 任務(wù)的配置,我們保持默認(rèn)即可。

8. 測(cè)試結(jié)果與總結(jié)

8.1 效果展示

我們直接先手動(dòng)運(yùn)行下創(chuàng)建好的“HelloAzureReleasePipeline”部署管道,然后訪問JasonHelloAzure API 網(wǎng)站,如下:

最后,我們來試試自動(dòng)化部署,看看效果(成果)哈 :)

我們創(chuàng)建一個(gè)Pull Request, 那么自動(dòng)跑我們配置好的CodeBuild Policy (其實(shí)就是跑BuildAndPublishHelloAzure Pipeline)

當(dāng)Pull Request Complete 后, 會(huì)自動(dòng)跑持續(xù)性構(gòu)建管道,以及部署管道:

約3分鐘后,部署完成,再次訪問JasonHelloAzure API: https://jasonhelloazure.azurewebsites.net/weatherforecast , 結(jié)果已經(jīng)更新:

希望對(duì)想用Azure DevOps 對(duì)自己的服務(wù)做自動(dòng)化CI/CD的人有幫助。

本文沒有重點(diǎn)介紹測(cè)試部分,可以直接給HelloAzure創(chuàng)建一個(gè)UnitTest Project,BuildAndPublishPipelline 可以增加一個(gè)跑單元測(cè)試的任務(wù)即可以實(shí)現(xiàn)自動(dòng)化構(gòu)建+測(cè)試了。

8.2 總結(jié)

Azure DevOps 整體還是很人性好的,在易用性和可擴(kuò)展性方面確實(shí)做的不錯(cuò)。對(duì)于一些中小企業(yè),還是一個(gè)不錯(cuò)的選擇,可以讓研發(fā)人員專注于業(yè)務(wù)邏輯,省去了一些CI/CD的繁雜瑣事。

微軟Azure部門可以說是最具有互聯(lián)網(wǎng)基因的事業(yè)群了,Azure的產(chǎn)品同時(shí)也有了互聯(lián)網(wǎng)的敏捷性和易用性,這也是微軟股價(jià)持續(xù)新高,被華爾街看好的原因。

參考鏈接

https://www.cnblogs.com/BrainDeveloper/p/12322251.html

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于PM吃瓜,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家