上次介紹了Azure Application Insights,實現了.net core程式的監控功能。這次讓我們來看看Azure DevOps Pipeline功能。Azure DevOps Pipeline 是Azure DevOps裡面的一個組件,對於12個月試用賬號同樣永久免費。 持續集成C ...
上次介紹了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鏡像,如果推送鏡像,如果部署鏡像,那麼請看下篇吧。
關註我的公眾號一起玩轉技術