Azure Pipeline là gì?
Azure Pipeline là một công cụ CI/CD (Continuous Integration / Continuous Delivery), cho phép chúng ta tự động build, chạy test và triển khai (deploy) phần mềm chỉ với vài bước cấu hình đơn giản.
Azure Pipeline miễn phí hoàn toàn cho các dự án công khai (public projects) và cung cấp 30 giờ miễn phí mỗi tháng cho các dự án riêng tư (private projects).
Những điểm mạnh của Azure Pipeline
✅ Hỗ trợ đa ngôn ngữ và nền tảng:
Làm việc tốt với hầu hết các ngôn ngữ phổ biến như Java, JavaScript, Node.js, Python, .NET, C++, Go, PHP,… và hoạt động trên Windows, Linux hoặc macOS.
🚀 Triển khai linh hoạt:
Có thể deploy cùng lúc lên nhiều môi trường khác nhau như máy ảo (Virtual Machines), container, hệ thống on-premises, hoặc nền tảng đám mây (Cloud Platforms).
☁️ Tích hợp mạnh mẽ với Azure Cloud:
Dễ dàng cấu hình, theo dõi và triển khai ứng dụng trực tiếp lên Azure, giúp rút ngắn đáng kể thời gian phát hành sản phẩm.
🔗 Kết nối đa dạng với hệ thống quản lý mã nguồn:
Hỗ trợ GitHub, GitLab, Bitbucket và nhiều source control khác, đảm bảo tính linh hoạt khi làm việc với các dự án hiện có.
![]() |
| Azure Pipelines Architecture (Source: Microsoft). |
Các thành phần trong Azure Pipeline
Cấu trúc này giúp quá trình tự động hóa trở nên linh hoạt, dễ mở rộng và dễ kiểm soát hơn.
Mỗi pipeline phải có ít nhất một stage, mỗi stage có ít nhất một job, và mỗi job gồm một hoặc nhiều step.
DEFINITIONS
Stage: Major divisions in the pipeline that consist of a specific set of commands to handle a related activity. For example, a stage could contain all the actions to test an application, while the next stage could contain all the actions required to deploy the application.
Jobs: A series of activities that run in a sequence. Steps in a job don’t run in parallel. The previous step has to finish before the next step can begin.
Task: An action performed on the pipeline. An example can be a task to
install dependencies on the agent before building and testing code.
Agent
Tham khảo: Microsoft-hosted agents
Các image phổ biến nhất bao gồm:
- windows-latest: Windows Server mới nhất.
- ubuntu-latest: Ubuntu Linux mới nhất.
- macos-latest: macOS mới nhất.
trigger:
- main
pool:
vmImage: 'windows-latest'
Setup Azure Pipeline
Để làm việc với môi trường Azure Pipelines, trước hết chúng ta cần chuẩn bị đầy đủ các thành phần cần thiết để có thể thực hiện toàn bộ quy trình build – test – deploy một cách tự động và liền mạch.Chuẩn bị
Trước khi tạo pipeline đầu tiên, bạn cần đảm bảo đã có:
- Tài khoản Azure DevOps và tổ chức (organization): Nếu bạn chưa có, hãy đăng ký tài khoản Azure DevOps và tạo một organization để quản lý dự án.
- Repository: Bạn cần một repository chứa mã nguồn của dự án — có thể lưu trữ trên Azure Repos, Gitlab hoặc GitHub. Trong hướng dẫn này, chúng ta sẽ sử dụng một dự án .NET Console Application đơn giản để thực hành.
- Quyền truy cập Azure Portal: Cần thiết nếu bạn muốn triển khai ứng dụng lên các dịch vụ Azure như Azure Kubernetes Service (AKS) hoặc các nền tảng khác.
Chọn YAML hay Classic Editor
Cả YAML Pipelines và Classic Editor đều có vai trò riêng, nhưng nếu bạn đã quen hoặc từng làm việc với Terraform, thì việc sử dụng YAML trong Azure Pipelines mang lại nhiều lợi ích rõ rệt.
YAML giúp bạn định nghĩa pipeline như một phần của source code, tức là mọi thay đổi trong pipeline đều được kiểm soát bằng Git, có thể review, revert, hoặc chia sẻ giống như code. Điều này rất phù hợp với triết lý Infrastructure as Code (IaC) mà Terraform hướng tới.
Bên cạnh đó, YAML cho phép bạn:
- Dễ dàng tái sử dụng cấu hình qua templates.
- Hỗ trợ tự động hóa hoàn toàn mà không cần thao tác giao diện.
- Giảm rủi ro khi triển khai, vì mọi thứ được kiểm soát bằng version control.
- Trong khi đó, Classic Editor tuy thân thiện cho người mới, nhưng về lâu dài lại khó mở rộng và khó quản lý thay đổi.
- Do đó, nếu bạn đã từng viết Terraform hoặc đã quen với workflow IaC, thì YAML pipelines chắc chắn là sự lựa chọn tối ưu — nhất quán, có thể kiểm soát, và phù hợp với các hệ thống CI/CD chuyên nghiệp.
Tạo Project và Repository trong Azure DevOps
Sau khi bạn đã thiết lập xong tài khoản và organization trong Azure DevOps, bước tiếp theo là tạo project đầu tiên cùng với kho mã nguồn (repository) để bắt đầu quy trình CI/CD.
Tạo Project mới
Đăng nhập vào tài khoản Azure DevOps
Nhấn New Project để tạo dự án mới.
Nhập tên dự án, ví dụ: AzureDevOps-Tutorial, kèm mô tả ngắn gọn nếu cần.
Chọn chế độ hiển thị (Visibility):
- Public – Dự án công khai, phù hợp khi bạn muốn chia sẻ hoặc học tập.
- Private – Dự án riêng tư, chỉ thành viên trong nhóm mới truy cập được.
Cuối cùng, nhấn Create Project để hoàn tất.
Trường hợp bạn sử dụng Repository Github, bạn setup: Project Settings > GitHub Connections > Connect your GitHub account.
Định nghĩa Pipelines
Trong Azure Pipelines, bạn có thể tạo pipeline build để kiểm tra (test) mã nguồn của mình, và pipeline release để triển khai (deploy) mã nguồn đó đến môi trường đích đã chỉ định.
Hình minh họa bên dưới luồng hoạt động của toàn bộ quy trình, từ lúc mã nguồn được cập nhật cho đến khi được triển khai.
![]() |
| Azure Pipelines flow (from Beginning Azure DevOps) |
Sau khi đã có project và repository, chúng ta sẽ bắt đầu tạo Azure Pipeline đầu tiên để tự động hóa quá trình build – test – deploy cho ứng dụng.
Các bước thực hiện
- Mở tab Pipelines
Trong trang Dashboard của dự án, chọn mục Pipelines ở menu bên trái, sau đó nhấn Create Pipeline
Thao tác này sẽ mở trình hướng dẫn (wizard) giúp bạn thiết lập pipeline một cách trực quan. - Kết nối pipeline với repository
Ở bước tiếp theo, bạn cần liên kết pipeline với kho mã nguồn (repository).
Hãy chọn nơi lưu trữ repository mà bạn muốn kết nối — có thể là Azure Repos, GitHub.
Chọn repository cụ thể
Sau khi chọn vị trí, bạn sẽ thấy danh sách các repository có sẵn.
Hãy chọn repository cụ thể mà bạn muốn sử dụng cho pipeline này.
Nếu bạn chọn Starter pipeline, hệ thống sẽ chuyển hướng bạn đến trang hiển thị code YAML mẫu
Tại đây, bạn có thể xem và chỉnh sửa nội dung YAML nếu muốn.
# This section defines the trigger(s) for the pipeline.
# 'main' specifies that the pipeline will run whenever changes are pushed to the 'main' branch.
trigger:
- main # automatically triggers this pipeline when changes are made to the 'main' branch.
# This defines the pool where the pipeline will run.
# 'ubuntu-latest' specifies the virtual machine image for executing tasks.
pool:
vmImage: 'ubuntu-latest' # This uses the latest Ubuntu image provided by Azure DevOps.
# Steps contain the individual tasks or actions that the pipeline will execute.
steps:
- script: echo Hello, world! # A script task to run shell commands. This one prints "Hello, world!".
displayName: 'Run my first pipeline script' # A friendly name for this step, making it easier to identify in the pipeline logs.
Sau đó, nhấn Save and Run để lưu lại cấu hình.
Giải thích
Trigger (Kích hoạt)
Phần trigger quy định khi nào pipeline được chạy tự động.
Trong ví dụ này, pipeline sẽ tự động chạy mỗi khi có thay đổi (push) được đưa lên nhánh main của repository.
Pool (Môi trường chạy)
Phần pool xác định môi trường ảo (virtual machine) nơi các tác vụ của pipeline sẽ được thực hiện.
Ví dụ: Azure DevOps sẽ chạy pipeline của bạn trong một máy ảo Ubuntu phiên bản mới nhất.
Ưu điểm là bạn không cần tự cài đặt môi trường build — Azure lo tất cả
pool:
vmImage: 'ubuntu-latest'Steps
Step có thể là một đoạn script đơn giản hoặc một task được định nghĩa sẵn trong Azure DevOps.
Nhiều step tạo thành job, và nhiều job có thể hợp lại thành stage trong pipeline.
Ví dụ:
steps:
- script: echo Hello, world!
displayName: 'Run a one-line script'
Tác vụ này chỉ đơn giản là chạy một lệnh shell in ra “Hello, world!” trên màn hình.
displayName là tên hiển thị của bước này — giúp bạn dễ nhận biết trong log khi pipeline chạy.
Quy trình thường gặp:
- Run tests → Kiểm tra mã nguồn trước khi triển khai.
- Package application → Đóng gói ứng dụng để sẵn sàng build hoặc deploy.
- Build Docker image → Tạo image từ mã nguồn đã đóng gói.
- Push Docker image → Đưa image lên kho chứa (như ACR hoặc Docker Hub).
trigger:
- master
pool:
vmImage: 'ubuntu-22.04'
variables:
buildConfiguration: 'Release'
steps:
- script: dotnet test
displayName: 'Run tests'
- script: dotnet publish -c $(buildConfiguration) -o out
displayName: 'Package application'
- script: docker build -t myapp:latest .
displayName: 'Build Docker image'
- script: docker push myapp:latest
displayName: 'Push Docker image'
Mỗi phần - script: chính là một step, đại diện cho một thao tác cụ thể trong pipeline.
Đây là code YAML sau khi chỉnh sửa cho Console Application
# Starter pipeline
# Start with a minimal pipeline that you can customize to build and deploy your code.
# Add steps that build, run tests, deploy, and more:
# https://aka.ms/yaml
trigger:
- main
pool:
vmImage: ubuntu-latest
variables:
buildConfiguration: 'Release'
jobs:
- job: BuildDotNetAlpine
displayName: 'Build C# Project (Debian/Ubuntu image)'
container: mcr.microsoft.com/dotnet/sdk:9.0
steps:
- script: dotnet restore
displayName: '1. Restore Dependencies'
# Specify the directory containing your .csproj file
workingDirectory: 'HelloWorldApp'
# 2. Build the C# Application
- script: dotnet build --configuration $(buildConfiguration) --no-restore
displayName: '2. Build Project'
# '--no-restore' ensures we use the packages restored in the previous step
workingDirectory: 'HelloWorldApp'
# 3. Publish (Compile output files to a ready-to-deploy folder)
- task: DotNetCoreCLI@2
displayName: '3. Publish Application'
inputs:
command: 'publish'
publishWebProjects: false
projects: 'HelloWorldApp/HelloWorldApp.csproj'
# The output path, $(Build.ArtifactStagingDirectory), is the temp location for Artifacts
arguments: '--configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)'
# 4. Upload the Artifact
- task: PublishBuildArtifacts@1
displayName: '4. Upload Artifact: drop'
inputs:
pathToPublish: '$(Build.ArtifactStagingDirectory)' # Source folder
artifactName: 'drop' # Name of the artifact
Không phải ai cũng thích viết YAML thủ công — và đó là lý do Task Assistant ra đời.
Sử dụng Task Assistant trong Azure Pipelines
Trong Azure Pipelines, tính năng “Show assistant” cung cấp giao diện đồ họa (GUI) giúp bạn thêm và cấu hình các task trực tiếp trong file YAML.
Tính năng này rất hữu ích để khám phá các task có sẵn và hiểu rõ các tham số đầu vào mà không cần nhớ cú pháp YAML chi tiết.
Cách sử dụng:
- Chỉnh sửa YAML pipeline: Mở pipeline trong Azure DevOps và chọn Edit.
- Bật “Show assistant”: Ở bên phải trình chỉnh sửa YAML, nhấn nút Show assistant.
- Tìm hoặc duyệt task: Dùng ô tìm kiếm hoặc duyệt theo nhóm để chọn task mong muốn.
- Cấu hình tham số: Điền các giá trị bắt buộc và tùy chọn (ví dụ: image name, build args, v.v.).
- Thêm vào pipeline: Nhấn Add, Azure sẽ tự động sinh đoạn YAML tương ứng và chèn vào vị trí con trỏ.
Sau khi thêm, bạn vẫn có thể chỉnh sửa YAML thủ công nếu muốn cấu hình nâng cao hơn.
Để ẩn giao diện này, chỉ cần nhấn “Hide assistant”.
Mỗi task được Azure định danh bằng cú pháp:
task: <task-name>@<version>Ví dụ:
task: DotNetCoreCLI@2 → task chạy lệnh .NET CLI, phiên bản 2.
task: PublishBuildArtifacts@1 → task publish artifact, phiên bản 1.
Tham khảo
Ebook: Beginning Azure DevOps-Planning, Building, Testing, and Releasing Software Applications on Azure
Azure Pipelines Tutorial: A Complete CI/CD Guide for Beginners
Azure DevOps Tutorial for Beginners | CI/CD with Azure Pipelines



Nhận xét
Đăng nhận xét