上次介紹了Azure Application Insights,實作了.net core程式的監控功能,這次讓我們來看看Azure DevOps Pipeline功能,Azure DevOps Pipeline 是Azure DevOps里面的一個組件,對于12個月試用賬號同樣永久免費,

持續集成CI
持續集成指的是,頻繁地(一天多次)將代碼集成到主干,
它的好處主要有兩個,
(1)快速發現錯誤,每完成一點更新,就集成到主干,可以快速發現錯誤,定位錯誤也比較容易,
(2)防止分支大幅偏離主干,如果不是經常集成,主干又在不斷更新,會導致以后集成的難度變大,甚至難以集成,
持續集成的目的,就是讓產品可以快速迭代,同時還能保持高質量,它的核心措施是,代碼集成到主干之前,必須通過自動化測驗,只要有一個測驗用例失敗,就不能集成,
Martin Fowler說過,"持續集成并不能消除Bug,而是讓它們非常容易發現和改正,"
摘自阮一峰大神的blog
DevOps跟CI就不多介紹了,這里我們定個目標:當我們提交代碼后,服務器自動編譯代碼,自動運行單元測驗,自動發送成功失敗的郵件,
創建組織

開通Azure DevOps功能,第一步需要創建一個組織,

隨便取個組織名稱,區域還是那個套路,選近的,這里選東亞,

創建倉庫
點擊繼續之后頁面會跳轉到正式的Azure DevOps界面,首先需要創建一個專案,這里跟Github一樣,需要選擇私有還有公開,估計Azure DevOps后端其實就是使用了Github的服務,這里選一個私有的吧,取個專案名稱:devop_test ,還可以設定用戶名密碼等資訊,

創建ASP.NET MVC專案
新建一個ASP.NET MVC專案,就默認的示例專案就行,

為了讓pipeline執行單元測驗,所以我們新建一個單元測驗功能,然后寫一個最簡單的單元測驗方法,
[TestClass()]
public class WeatherForecastControllerTests
{
[TestMethod()]
public void GetTest()
{
var ctrl = new WeatherForecastController(null);
var result = ctrl.Get();
Assert.IsNotNull(result);
}
}
上傳代碼到倉庫
有了代碼之后我們要把代碼傳到倉庫里去,就是使用上面的倉庫的地址、用戶名、密碼,這是git的問題了,不多說了,那么上面是一些準備作業,下面開始正式使用pipeline,
配置Pipeline
點擊左側的pipeline選單,開始配置pipeline的導航,
第一步:需要配置代碼倉庫,選擇剛才的Azure Repos Git,當然它還支持從Github或者別的地方拉代碼,

第二步:選擇剛才的devop_test倉庫,

第三步:開始配置yml,這個yml呢其實跟docker-compose的配置啊,dockerfile啊一樣,就是配置了一些列的任務(task),
trigger:
- master
pool:
vmImage: 'ubuntu-18.04'
variables:
solution: '**/*.sln'
buildPlatform: 'Any CPU'
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'restore'
- task: DotNetCoreCLI@2
displayName: Build
inputs:
command: build
projects: '**/*.csproj'
arguments: '--configuration $(buildConfiguration)'
- task: DotNetCoreCLI@2
inputs:
command: test
projects: '**/*Tests/*.csproj'
arguments: '--configuration $(buildConfiguration)'
大概講下這個yml配置了啥,
trigger:表示代碼的分支
vmImage:表示虛擬機的環境,是win還是linux,
variables:定義了一些引數,后面的設定可以直接使用,
steps:步驟,里面每一個task就是一個步驟,
task:
command: 'restore' nuget包還原,
command: 'build' 編譯代碼,
command: 'test' 運行單元測驗,
配置好yml之后點擊“SAVE AND RUN”就會執行第一次pipeline的任務,運行之后任務會先進入佇列,等待一會就能看到任務是否執行成功了,

下面這圖就表示任務執行成功了,每一步綠色的勾勾,還有執行了幾秒都會顯示出來,還可以看更加詳細的日志,

這個界面表示運行的單元測驗的結果,成功了幾個,失敗了幾個,表示的都很清楚,

成功之后你的賬戶郵箱還會收到郵件通知,成功是綠色的,

前面都是成功的,我們故意把代碼寫個錯誤,然后直接提交代碼,看看build能不能過,
[HttpGet]
public IEnumerable<WeatherForecast> Get()
{
var rng = new Random();
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55) //error ,去掉了一個逗號
Summary = Summaries[rng.Next(Summaries.Length)]
})
.ToArray();
}
改完代碼后提交上去,可以看到任務會自己執行,然后過一會出現了一個紅色的X,果然pipeline報錯了,點擊任務可以看到更加詳細的錯誤串列,

同時也受到了失敗的郵件通知,

總結
這次我們通過Azure DevOps Pipeline簡單演示了CI的整個程序,我們成功實作了一開始定的小目標:寫代碼>提交代碼>編譯>運行測驗>發送通知,除了yml配置有點麻煩,整過程序也都是很簡單,而且是這個功能都是免費的,Azure DevOps pipeline除了CI,顯然還能實作CD,如何編譯docker鏡像,如果推送鏡像,如果部署鏡像,那么請看下篇吧,
關注我的公眾號一起玩轉技術

轉載請註明出處,本文鏈接:https://www.uj5u.com/net/1651.html
標籤:.NET Core
