I. Lời mở đầu
Ở topic này mình sẽ hướng dẫn cơ bản về việc setup CICD trên Azure Pipeline cho một dự án C# siêu nhỏ. Gồm các stage checkout code, build, deploy. Bỏ qua mấy cái to bự như multiple environment, testing,…. nhé vì đây là hướng dẫn setup cơ bản cho anh em mới bắt đầu để hiểu sơ lược cách hoạt động của Azure Pipeline
II. Vô việc!
1. Create an account with Azure DevOps
Đầu tiên anh em cần truy cập https://azure.microsoft.com/en-us/ để đăng ký tài khoản Azure free, nhớ không nhầm thì được 200$, check detail ở https://azure.microsoft.com/en-us/free
2. Start Free Azure DevOps
Sau khi tạo được cái acc free thì mọi step dưới đây còn dễ hơn nữa
Step 2.1: Vào Azure Portal bắt đầu tạo môi trường để deploy, ở bà ivieest này mình sẽ dùng các servicess của Azure như Resource Groups, Azure App Services, Azure App Plan.
Step 2.2: Start free Azure DevOps để vào Azure DevOps
Step 2.3: Tạo mới một organization như “Kế hoạch thành đại bàng”
Step 2.4: Tạo mới một pipeline => chọn GitHub. Mục đích của việc này là ta sẽ connect được giữa Azure Pipeline với repository đang chứa source code của dự án. Ở đây mình chọn GitHub làm example. Trong trường hợp step 2.3 anh em nào không có repo mẫu thì lụm cái https://github.com/taminhhieu31gl/pipelines-dotnet-core của mình xài đỡ cũng được. Azure Pipeline sẽ generate ra một pipeline Hello Word và lưu nó ở chính branch của repo Github, naming là azure-pipeline.yml. Hoặc nếu thấy cái file khó ưa quá thì không generate nó ra cũng được nhé.
Step 2.4: Bấm run pipeline để chạy thử Hello World hoặc copy paste cái đoạn dưới đây và commit vào azure-pipeline.yml. Để mình giải thích chút:
# ASP.NET Core
# Build and test ASP.NET Core projects targeting .NET Core.
# Add steps that run tests, create a NuGet package, deploy, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/dotnet-core
trigger:
- master
pool:
vmImage: ubuntu-latest
variables:
buildConfiguration: 'Release'
steps:
- script: dotnet build --configuration $(buildConfiguration)
displayName: 'dotnet build $(buildConfiguration)'
- task: ArchiveFiles@2
inputs:
rootFolderOrFile: '/home/vsts/work/1/s/bin/Release/net6.0/pipelines-dotnet-core.dll'
includeRootFolder: true
archiveType: 'zip'
archiveFile: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
replaceExistingArchive: true
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: 'Azure subscription 1(095eb3b1-0317-4e50-8340-d4d8345bc143)'
appType: 'webApp'
WebAppName: 'demositecore'
packageForLinux: '$(Build.ArtifactStagingDirectory)/$(Build.BuildId).zip'
Giải thích chút cái mớ trên:
- trigger: định nghĩa branch trên SCM, khi có commit trên branch được định nghĩa, pipeline sẽ được thực thi.
- pool: để pipeline hiểu bạn đang muốn thực hiện đống CICD này ở agent nào. Chi tiết về Agent của Azure sẽ trong bài viết khác nhé
- variables: định nghĩa biến môi trường để “xài đi xài lại” trong pipeline
- steps, task: kiểu như vô vấn đề, bạn cần làm gì sẽ defind ở đây
Ví dụ: về C# sẽ có nhiều cách build, mình xài script dotnet build để build cái project này. - displayName: hiển thị tên của cái stage này
- ArchiveFiles@2: cơ chế là sau khi build ra package, mình sẽ zip nó lại để mang đi deploy cho stage tiếp theo
- AzureRmWebAppDeployment@4: Do đang xài Azure App Service nên mình sẽ dùng task này để deploy, kiểu như lấy cái zip từ stage trên ném vô Azure App Service sẽ tự mang đi deploy cho bạn. Azure App Service sẽ có 3 DeploymentType. Ở pipeline mình không dùng nên sẽ tự hiểu mặc định, còn mặc định là gì, 3 loại nào thì để bài viết khác :)).
II. Kết quả
Vào lại Auzre Portail, chọn Resource Group => Azure App Service mà bạn đã tạo ở step 2.2. Click Overview => https://demositecore.azurewebsites.net. Hãy sửa code và commit ở github xem có trigger hay bất ngờ gì xảy ra không nhé.
Bài viết tới đây là hết, nhân tiện thì một số tình tiết chưa nếu chi tiết sẽ được viết trong bài viết chi tiết khác nhé. Mọi thứ mình để ở đây, anh em tham khảo https://github.com/taminhhieu31gl/pipelines-dotnet-core