基本可以再1個(gè)小時(shí)內(nèi)實(shí)現(xiàn)自動(dòng)化構(gòu)建、打包以及部署到Azure服務(wù)器上
第一步,需要在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ò)延遲。
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。
Repository 顧名思義就是存放代碼的地方, 一個(gè)Repo 可以有很多個(gè)分支,一般默認(rèn)為master分支。
在這里,我們創(chuàng)建一個(gè)名叫AzureWebApps的Repository,并且假設(shè)我們以VisualStudio為IDE,選擇VisualStudio .ignore 文件模板。.ignore 文件里配置了那些我們納入Git管理的文件。
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.
此構(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.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)上。
此發(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.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