基本可以再1個小時內(nèi)實現(xiàn)自動化構(gòu)建、打包以及部署到Azure服務(wù)器上
第一步,需要在Azure DevOps (https://dev.azure.com/)上創(chuàng)建一個組織團體(Organization)。
Organization可以理解為是一個公司(或者一個事業(yè)群)或某個機構(gòu)的所有數(shù)據(jù)的統(tǒng)一存儲庫,微軟稱之為托管存儲庫。
Host 項目的地區(qū)選擇一個最近的區(qū)域最好,減少網(wǎng)絡(luò)延遲。
Azure DevOps Project 一般是一個大組或者一個大的周期內(nèi)共同使用的一個數(shù)據(jù)及代碼集合。你在創(chuàng)建項目時,可以設(shè)置項目名稱以及項目具體的介紹;也可以選擇項目的可見性,可以設(shè)置為公開的或者私有的。版本控制可以選擇默認的Git。
Repository 顧名思義就是存放代碼的地方, 一個Repo 可以有很多個分支,一般默認為master分支。
在這里,我們創(chuàng)建一個名叫AzureWebApps的Repository,并且假設(shè)我們以VisualStudio為IDE,選擇VisualStudio .ignore 文件模板。.ignore 文件里配置了那些我們納入Git管理的文件。
4.1 克隆代碼到本地
我們先把上面創(chuàng)建的AzureWebApps Repo 克隆到本地,方便在本地對代碼進行增刪改。Azure DevOps 本身也提供了在線編輯Git Repo,一般一些微小的改動可以直接在線修改。
打開Visual Studio,連接到我們的托管存儲庫,并定位到我們所創(chuàng)建的代碼倉庫(AzureWebApps),點擊“克隆”即可。
4.2 創(chuàng)建HelloAzure API網(wǎng)站。
接下來,我們在VS里來創(chuàng)建一個Web API project。
新建項目模板時,我們選擇“Asp.Net Core Web 應(yīng)用程序”模板,如下:
當我們創(chuàng)建完項目后,默認的API Project是一個隨機返回天氣預(yù)報信息的API。我們可以任意修好一些配置,如端口,打包輸出位置,對象類型及屬性等。我在這里簡單加了一個Source 屬性給WeatherForecase.cs.
此構(gòu)建管道(Build Pipeline)的作用就是:每當我們有代碼更新(Push)到遠程master分支時,它會自動用來自動構(gòu)建,(自動測試,這里略過),自動打包生成Artifacts 供后面自動部署管道使用。
5.1 創(chuàng)建構(gòu)建管道 (BuildAndPublishHelloAzure)
我們在Pipelines 頁面,新建一個Pipeline, 并選擇連接到“Azure Repos Git” 作為代碼倉庫位置,如下圖:
接著,選擇我們上面存放代碼的代碼倉庫(Repository) - AzureWebApps:
接下來,我們來進行初始化配置我們的構(gòu)建管道(Build Pipeline)。我們給他配置上一個默認的任務(wù)(Task)- ASP.Net Core (.NET Framework) , 此Task 會利用VS Build來自動編譯.sln 及 .csproj的項目。
這里我簡單介紹下,Azure的一個Pipeline 一般是包含多個任務(wù)(Task), 每個任務(wù)(Task)是一個最小的運行單元。Azure 市場(Market place)上有很多現(xiàn)成的task 模板可以供咱們直接使用,只需簡單的配置一些參數(shù)即可。
因為我們需要把編譯構(gòu)建HelloAzure的結(jié)果包發(fā)布到Azure上的某個地方,因此我們需要給我們的Build Pipeline 加一個任務(wù) Publish build artifacts (直接在搜索框里搜‘publish build’):
Publish build artifacts 任務(wù)有三個參數(shù),我們保持默認就可以。請注意,其中Artifact name (drop) 在后面配置部署管道時會用到。
保存后,我們可以把我們的管道重命名成一個更有意義的名字,如 BuildAndPublishHelloAzure :
5.2 配置自動化(持續(xù)性)構(gòu)建
構(gòu)建管道創(chuàng)建好了,接下來我們需要給我們的Repository配置如何自動化構(gòu)建。
我們的需求是,如果master 分支有代碼更新(包括新建Pull Request, Complete Code/Push),那么就自動運行我們BuildAndPublishHelloAzure Pipeline。
首先我們在分支頁面,找到Master 分支的分支策略管理頁面,添加一個構(gòu)建策略:
新建的構(gòu)建策略的配置頁面,觸發(fā)一項我們選”Automatic“,這樣每當有新的PullRequest 創(chuàng)建時,就會自動綁定此BuildAndPublishHelloAzure Pipeline 進行編譯,構(gòu)建,跑單元測試等。
最后,我們需要在配置,當有代碼check in (PullRequest Complete)后,也自動運行這個build Pipeline。
在BuildAndPublishHelloAzure 編輯頁面,跳到Triggers(觸發(fā)器)這個配置tab頁面,我們勾上并選中“Enable continuous integration” 即可,一般我們只需要對特定的一些分支設(shè)置持續(xù)性集成構(gòu)建測試,所以我這里也只設(shè)置了master 分支。
到此,自動化的持續(xù)性集成構(gòu)建 (測試)及打包已經(jīng)完成了。
6.1 創(chuàng)建Azure訂閱(Subscription)
在創(chuàng)建Web 網(wǎng)站之前,我們需要創(chuàng)建一個Azure 訂閱(Subscription,Azure用來收費的賬戶,如果你已經(jīng)有了,可跳過)。登錄www.azure.com, 用微軟賬戶登錄,在門戶頁面創(chuàng)建一個subscription,如下:
6.2 創(chuàng)建HelloAzure Web API Application
在Azure Portal (門戶)的搜索框里搜”Api app“, 就回出來 API App 的一個創(chuàng)建模板,點擊它開始創(chuàng)建:
配置好你的網(wǎng)站名字 - JasonHelloAzure,并選擇上一步創(chuàng)建的訂閱(Azure subsciption - Jason Test) ,其他默認即可。
接下來我們將介紹如果將自動化構(gòu)建生成好的包部署到我們創(chuàng)建的這個API 網(wǎng)站(JasonHelloAzure)上。
此發(fā)布管道(Release Pipeline)的作用就是:每當我們有代碼更新(Push)后并已經(jīng)打包好后,此管道會自動將構(gòu)建管道生成的Artifacts 自動部署到Azure Web App (JasonHelloAzure)。
7.1 創(chuàng)建發(fā)布管道HelloAzureReleasePipeline
我們在Releases 頻道,新建一個Release Pipeline, 并選擇連接到“Azure Repos Git” 作為代碼倉庫位置,如下
新建是,會彈出來讓你選擇一個模板(如下圖),我們這可以選擇”Azure App Service deployment“, 這個模板適用于所有Azure Web app及其他一些app (如containers 部署,Azure Function apps等):
現(xiàn)在我們來給這個部署管道設(shè)置部署的來源,點擊Artifacs這個模塊,在右邊會彈出來配置的頁面:
Project 就是我們第二不創(chuàng)建的項目,也是存放我們創(chuàng)建的構(gòu)建管道的地方。
Source (build pipeline),選擇我們創(chuàng)建的BuildAndPublishHelloAzure 管道。
默認版本(Default Vesion),選擇Latest即可,意思是每當上面的BuildAndPublishHelloAzure管道的最新發(fā)布的包。
Source alias, 就是包名的意思,在配置BuildAndPublishHelloAzure構(gòu)建管道時,有一步配置Artifacts name 配置的就是 "drop”, 這里只需前后配置一致即可,任意字符串都可以。
7.2 配置自動化持續(xù)性部署
現(xiàn)在我們來給部署管道配置持續(xù)性部署觸發(fā)(Continuous deployment trigger), 這個意味著,每當有新的artifacts 包生成時,就自動觸發(fā)這個部署管道進行部署。
點擊Artifacts 模塊里的那個小閃電button, 右邊就會出來持續(xù)性部署觸發(fā)器的配置頁面。
選擇一個master 分支,啟用Continue deployment trigger, 如下圖:
最后一步,我們來配置部署管道要部署的目的地,也就是配置到我們上面創(chuàng)建好的Azure API App (JasonHelloAzure)。
一個部署管道也跟構(gòu)建管道類似,區(qū)別是他包含多個階段(Stage),一個階段又包含任務(wù)(Task)。
點擊任務(wù)選項組(Tasks),在右邊的配置頁里,填好階段名稱,選擇訂閱名稱(Azure subscription - Jason Test)。
App type, 由于我們創(chuàng)建的是API App,自然選擇API App, 選了API App 后,最后的App service name下拉框就會出現(xiàn)所有該訂閱下面的API App, 我們選擇JasonHelloAzure及可。
Deploy Azure App Service 任務(wù)的配置,我們保持默認即可。
8.1 效果展示
我們直接先手動運行下創(chuàng)建好的“HelloAzureReleasePipeline”部署管道,然后訪問JasonHelloAzure API 網(wǎng)站,如下:
最后,我們來試試自動化部署,看看效果(成果)哈 :)
我們創(chuàng)建一個Pull Request, 那么自動跑我們配置好的CodeBuild Policy (其實就是跑BuildAndPublishHelloAzure Pipeline)
當Pull Request Complete 后, 會自動跑持續(xù)性構(gòu)建管道,以及部署管道:
約3分鐘后,部署完成,再次訪問JasonHelloAzure API: https://jasonhelloazure.azurewebsites.net/weatherforecast , 結(jié)果已經(jīng)更新:
希望對想用Azure DevOps 對自己的服務(wù)做自動化CI/CD的人有幫助。
本文沒有重點介紹測試部分,可以直接給HelloAzure創(chuàng)建一個UnitTest Project,BuildAndPublishPipelline 可以增加一個跑單元測試的任務(wù)即可以實現(xiàn)自動化構(gòu)建+測試了。
8.2 總結(jié)
Azure DevOps 整體還是很人性好的,在易用性和可擴展性方面確實做的不錯。對于一些中小企業(yè),還是一個不錯的選擇,可以讓研發(fā)人員專注于業(yè)務(wù)邏輯,省去了一些CI/CD的繁雜瑣事。
微軟Azure部門可以說是最具有互聯(lián)網(wǎng)基因的事業(yè)群了,Azure的產(chǎn)品同時也有了互聯(lián)網(wǎng)的敏捷性和易用性,這也是微軟股價持續(xù)新高,被華爾街看好的原因。
參考鏈接
https://www.cnblogs.com/BrainDeveloper/p/12322251.html