Tối ưu hóa và Giám sát Pipeline của bạn
Hồi đầu sự nghiệp, xây dựng pipeline không phải thách thức lớn nhất—mà là có một pipeline nhanh và ổn định. Một pipeline tối ưu không chỉ giúp build nhanh hơn; nó còn giảm bực bội cho đội ngũ, hạ rủi ro triển khai và tăng tốc độ giao hàng.
Tôi sẽ chia sẻ một số mẹo và chiến lược bạn có thể dùng để giữ Azure DevOps Pipelines nhanh, gọn và đáng tin cậy.
Bộ nhớ đệm (caching) cho pipeline
Cài đặt phụ thuộc cũng là một nút thắt cổ chai phổ biến. Dù bạn làm việc với npm, .NET hay các trình quản lý gói khác, việc lặp lại tải xuống cùng một phụ thuộc có thể lãng phí đáng kể thời gian. Lưu đệm phụ thuộc và artifact giữa các lượt chạy sẽ cắt giảm mạnh thời gian thực thi.
Cách lưu đệm phụ thuộc trong Azure Pipelines như sau.
Trước hết, bạn cần xác định trình quản lý gói, chẳng hạn:
- Node.js (
node_modules) - Gói NuGet
- Python (gói
pip) - Phụ thuộc Maven/Gradle
Azure Pipelines hỗ trợ cơ chế lưu đệm như tác vụ Cache@2, cho phép lưu đệm phụ thuộc giữa các lượt chạy pipeline.
Hãy lấy ví dụ lưu đệm đơn giản cho Node.js:
# This task is used to cache files to speed up your pipeline.
- task: Cache@2 # This is the task name for caching files in Azure Pipelines.
inputs:
# Key is used to identify the cache. It combines npm (package manager), operating system (OS), and package-lock.json files.
key: 'npm | "$(Agent.OS)" | package-lock.json'
# RestoreKeys is an optional value used when the specific cache key is not found. It helps to find a fallback cache.
restoreKeys: |
npm | "$(Agent.OS)"
# Path defines the location of files or folders to be cached.
# Here, we are caching the 'node_modules' directory to avoid reinstalling dependencies.
path: '$(Build.SourcesDirectory)/node_modules'
# CacheHitVar is a variable that stores whether the cache was successfully used (restored).
# This can be checked later in the pipeline to decide if tasks need to run.
cacheHitVar: 'NPM_CACHE_RESTORED'
Sau đó bạn có thể bỏ qua bước cài đặt nếu đã có cache. Đây là một kiểm tra thông minh trước khi hoàn tất cài đặt npm. Đó là logic theo điều kiện hiệu quả.
Ví dụ đơn giản bên dưới:
# This step runs the command to install Node.js dependencies using npm.
- script: npm install # Installs packages listed in the package.json file.
# The condition checks whether the cache was restored successfully.
# This step will run if the cache is not restored ('NPM_CACHE_RESTORED' is not true).
condition: ne(variables.NPM_CACHE_RESTORED, 'true') # Run only if the cache is not restored.
Ví dụ lưu đệm đơn giản cho ứng dụng Node.js này lưu thư mục cache npm sử dụng package-lock.json làm khóa. Khi phụ thuộc không thay đổi, nó sẽ khôi phục, tiết kiệm vài phút cho mỗi lần build.
Tôi từng chứng kiến caching giảm đáng kể thời gian build, đặc biệt ở dự án lớn, nhưng chỉ khi chọn khóa cache hợp lý. Ở một dự án trước, điều này giảm 55% thời gian build cho một ứng dụng Node.js.
Giám sát sức khỏe pipeline
Một pipeline thành công không chỉ là những dấu tích xanh, mà còn là khả năng quan sát và phản hồi nhanh. Khi có sự cố, bạn muốn đội ngũ biết ngay lập tức. Dưới đây là cách đi trước vấn đề.
Cách thiết lập dashboard Azure DevOps
Azure DevOps cung cấp các widget tích hợp để hiển thị trạng thái pipeline, các lần chạy gần đây, tỷ lệ thất bại và thời lượng trung bình.
- Trước hết, đi tới Dashboards trong dự án của bạn.

- Sau đó nhấp New Dashboard hoặc dùng dashboard hiện có.

- Bạn có thể thêm các widget như: Build History, Release Pipeline Overview, Test Results Trend, và nhiều hơn nữa.

Đây là những thành phần thiết yếu để theo dõi xu hướng pass/fail, xem môi trường nào có vấn đề, và nhiều hơn nữa.
Cấu hình cảnh báo cho pipeline thất bại
- Ở góc dưới bên trái dự án, đi tới Project Settings.

- Nhấp Notifications.

- Sau đó nhấp New Subscription.

Giả sử tình huống: Ở phần Category, chọn Build; ở phần Template, chọn “A build fails”, và nhấp Next.
Bạn sẽ thấy giao diện như bên dưới:

- Cuối cùng, nhấp Finish.
- Trong mục Notifications, bạn có thể kiểm tra mô tả Build cho “A build fails” mà chúng ta đã tạo trước đó.

Tôi từng bỏ lỡ một lỗi triển khai nghiêm trọng vì không cấu hình cảnh báo. Từ đó, tôi luôn thiết lập và cấu hình cảnh báo cho đội ngũ cho mọi triển khai production. Nhờ vậy, tôi không bao giờ bỏ lỡ một bản build hỏng hoặc độ trễ trong chu kỳ phát hành.
Phân tích hiệu năng pipeline
Chúng ta biết rằng dù pipeline hoạt động, nó vẫn có thể chậm, và pipeline chậm sẽ giết chết năng suất. Vì vậy, xác định nút thắt sớm sẽ giúp tránh rắc rối về sau.
Các chỉ số pipeline làm sáng tỏ hiệu năng của build và triển khai. Cách truy cập như sau.
Trước hết, bạn cần bật Analytics Views trong project settings và kết nối tới Power BI hoặc khám phá qua biểu đồ tích hợp.
Giám sát sức khỏe pipeline
- Trong phần Pipelines, vào Analytics.
- Xem các chỉ số như tỷ lệ pass của pipeline, tỷ lệ pass của kiểm thử và thời lượng pipeline.

Hãy khám phá sâu hơn các chỉ số chính có thể theo dõi trong analytics và lý do chúng quan trọng:
|
Chỉ số |
Vì sao quan trọng |
|
Xu hướng thời lượng build |
Giúp dễ dàng phát hiện chậm dần theo thời gian. |
|
Tỷ lệ thất bại theo nhánh |
Giúp xác định tính năng không ổn định. |
|
Thời gian chờ trong hàng đợi |
Giúp phát hiện thiếu tác nhân (agent). |
Vài tháng trước, tôi làm việc trên pipeline của khách hàng, và điều nổi bật nhất là Thời gian chờ trong hàng đợi. Tôi phát hiện đội của mình đã quá tải pool tác nhân tự lưu trữ, và 40% thời gian pipeline dùng để chờ runner khả dụng. Không ai nhận ra cho tới khi analytics chỉ ra rõ ràng.
Chúng tôi khắc phục bằng cách thêm hai tác nhân tự lưu trữ và phân bổ tải theo loại job. Kết quả tức thì; thời gian build trung bình của pipeline giảm khoảng 35%.
Giám sát bằng log
Ngoài chỉ số, timeline logs vô cùng giá trị, đặc biệt với tác vụ chạy lâu. Nhiều năm qua, tôi có thói quen thêm các mốc đánh dấu log tùy chỉnh trong các bước script quan trọng để xác định chính xác điểm trễ.
Ví dụ đơn giản:
# This step prints a message to the console in the pipeline logs.
# It helps to mark the start of the dependency installation process.
echo "=== START: Dependency Install ===" # Display a message indicating the beginning of dependency installation.Thực tiễn tốt nhất cho Azure Pipelines
Giờ khi chúng ta đã đi qua các dịch vụ cốt lõi của Azure Pipelines và nhiều nội dung khác, hãy xem cách tận dụng tối đa bằng cách tuân theo các thực tiễn tốt nhất sau.
Hãy chuyển từ hiệu năng sang cấu trúc, vì một pipeline nhanh nhưng khó bảo trì vẫn sẽ gây hại cho bất kỳ đội ngũ nào.
Tổ chức pipeline cho các đội
Khi nhiều đội hoặc môi trường dùng chung pipeline, mọi thứ thường trở nên lộn xộn. Bạn sẽ cần cấu trúc. Một pipeline khổng lồ cho cả development, staging và production sẽ dẫn đến hỗn loạn.
Để tổ chức pipeline, bạn cần tách theo môi trường. Hãy xem một cấu trúc đơn giản dưới đây.
|
Môi trường |
Tên pipeline |
Trigger |
|
Development |
|
Feature branches (Chạy trên mọi commit) |
|
Staging |
|
Pull request → Staging (Kích hoạt thủ công) |
|
Production |
|
Thủ công hoặc release pipelines (Yêu cầu phê duyệt) |
Những điểm chính từ cấu trúc đơn giản này:
- Mỗi tệp kéo từ các template dùng chung.
- Mỗi tệp dùng biến theo môi trường.
- Mỗi tệp kiểm soát quyền truy cập qua quyền của pipeline.
Theo kinh nghiệm, việc tách bạch này giúp gỡ lỗi dễ hơn và cho phép lập trình viên junior triển khai lên môi trường Dev mà không gây rủi ro cho Production.
Sử dụng template và mã tái sử dụng
DevOps là về việc cắt giảm thao tác thủ công và cải thiện tự động hóa trên toàn bộ quá trình phát triển phần mềm.
YAML dễ phát sinh lỗi khi sao chép-dán giữa các dự án. Azure DevOps có template pipeline cho thiết lập DRY (Don’t Repeat Yourself) qua YAML pipelines. Bạn có thể tái sử dụng template YAML trên nhiều dự án, thiết kế pipeline nhất quán, và thậm chí giảm thời gian xử lý pipeline.
Ví dụ một template build có thể tái sử dụng:
Trước tiên, định nghĩa template build, build-template.yml:
# Here we configure the platform and the build configuration.
parameters:
buildPlatform: 'Any CPU' # This specifies the build platform (e.g., Any CPU, x86, x64).
buildConfiguration: 'Release' # This specifies the build configuration (Release) to avoid warning.
# A pipeline is composed of steps (a series of tasks that will be executed)
steps:
- task: DotNetCoreCLI@2 # Task for running .NET Core commands in the pipeline.
inputs:
command: 'build' # This runs the 'build' command to compile the project(s).
projects: '**/*.csproj' # This specifies to build all .csproj files in the repository.
arguments: '--configuration ${{ parameters.buildConfiguration }}'
# This passes the build configuration parameter (e.g., Release or Debug) to the command.
Dùng template build trong pipeline chính của bạn:
# A pipeline job is a group of tasks. Here, the job is named 'Build'.
jobs:
- job: Build # The job name where the build process occurs.
# Steps define the tasks or actions the pipeline will perform.
steps:
- template: templates/build-template.yml # Reference an external YAML template for reusable steps.
Quản lý bí mật và biến
Khi làm việc trên dự án, đặc biệt trong môi trường cộng tác, việc sử dụng thông tin nhạy cảm như chuỗi kết nối cơ sở dữ liệu, API key, mật khẩu hoặc token là phổ biến. Nếu những bí mật này được hardcode trong mã nguồn hoặc lộ ra trong log, chúng dễ bị lộ lọt.
Hãy xem cách quản lý an toàn bí mật và biến bằng secrets và variable groups của Azure Pipelines.
Bước 1: Tạo variable group
- Nhấp vào tab Pipelines ở thanh bên trái.
- Trong phần Pipelines, nhấp Library.

- Tạo variable group:
- Nhấp vào tab Variable groups.

- Nhấp nút Add variable group.
- Nhập tên cho variable group (ví dụ,
MyAppSecrets).

Bước 2: Thêm bí mật vào variable group
- Thêm biến:
- Trong variable group, nhấp Add để tạo biến mới.

- Nhập tên biến (ví dụ,
DB_CONNECTION_STRING). - Đánh dấu chọn Keep this value secret để đảm bảo được xử lý như bí mật.
- Nhập giá trị của biến (ví dụ, chuỗi kết nối cơ sở dữ liệu của tôi).

- Nhấp Save để lưu biến.

Bước 3: Sử dụng bí mật trong pipeline
Khi bạn đã tạo variable group với bí mật, bạn có thể dùng các biến này trong tệp YAML pipeline.
- Tham chiếu variable group: Thêm variable group vào tệp YAML pipeline:
variables:
- group: MyAppSecrets
- Dùng bí mật trong các bước: Bạn có thể tham chiếu bí mật trong các bước pipeline bằng cú pháp
$(VariableName). Ví dụ cách dùngDB_CONNECTION_STRINGtrong một bước script:
# This defines the trigger for the pipeline.
# The pipeline runs automatically whenever changes are pushed to the 'main' branch.
trigger:
- main # Trigger the pipeline on changes to the 'main' branch.
# The pool specifies the environment where the pipeline will run.
# 'ubuntu-latest' means the pipeline will use the latest Ubuntu operating system image.
pool:
vmImage: 'ubuntu-latest' # Use the latest Ubuntu image provided by Azure Pipelines.
# Variables section defines reusable values for the pipeline.
# 'group: MyAppSecrets' links to a variable group that stores sensitive information like secrets.
variables:
- group: MyAppSecrets # Load secrets, such as database credentials, from a variable group.
# Steps define the tasks that the pipeline will execute one by one.
steps:
- script: |
echo "Connecting to the database..." # Print a message indicating the start of database connection.
echo "Connection String: $(DB_CONNECTION_STRING)" # Display the database connection string from the variable group.
displayName: 'Connect to Database' # A simple name for this step that appears in the pipeline logs.
Bước 4: Chạy pipeline
- Khi bạn lưu tệp YAML, vào mục Pipelines và nhấp Run Pipeline.
- Sau khi pipeline chạy, bạn có thể kiểm tra log. Bạn sẽ thấy giá trị bí mật được ẩn, giữ an toàn cho thông tin nhạy cảm.
Kết luận
Trong hướng dẫn này, chúng ta đã đi qua trọn vẹn hành trình sử dụng Azure Pipelines—từ thiết lập pipeline đầu tiên đến build, kiểm thử, triển khai, giám sát và tối ưu hóa.
Giai đoạn triển khai cần luyện tập. Hãy bắt đầu đơn giản, liên tục cải tiến, và theo thời gian, bạn sẽ tự tin và thành thạo trong việc quản lý quy trình CI/CD. Azure Pipelines cung cấp công cụ, còn bạn mang đến sự lặp lại và học hỏi.
Với nỗ lực bền bỉ, bạn có thể tinh gọn quy trình phát triển và tự tin phát hành phần mềm chất lượng cao ở quy mô lớn.
Để tìm hiểu sâu hơn về Azure DevOps và Microsoft Azure, hãy xem các tài nguyên sau:
- Hướng dẫn Azure DevOps - Hướng dẫn này đưa bạn qua Azure DevOps, giúp CI/CD dễ dàng hơn bao giờ hết.
- Understanding Microsoft Azure – Xây nền tảng vững chắc về Microsoft Azure và khai mở sức mạnh điện toán đám mây.
- Microsoft Azure Fundamentals (AZ-900) – Sẵn sàng cho kỳ thi với lộ trình thân thiện cho người mới, bao quát các nền tảng chính của Azure.
- Understanding Microsoft Azure Architecture and Services – Tìm hiểu cách kiến trúc và dịch vụ của Azure kết hợp để vận hành các giải pháp đám mây.
Câu hỏi thường gặp
Tôi có thể dùng Azure Pipelines cho các dự án không thuộc Azure không?
Có, bạn có thể. Azure Pipelines hỗ trợ triển khai lên on-premise và nhiều môi trường đám mây khác như AWS, GCP và nhiều môi trường khác.
Azure Pipelines hỗ trợ những ngôn ngữ lập trình nào?
Azure Pipelines hỗ trợ nhiều ngôn ngữ lập trình, bao gồm Node.js, Python, Java, .NET và nhiều ngôn ngữ khác.
Sự khác biệt giữa Azure Pipelines và GitHub Actions là gì?
Azure Pipelines tích hợp sâu hơn với hệ sinh thái Azure và có các công cụ triển khai mạnh mẽ, trong khi GitHub Actions cung cấp trải nghiệm CI/CD đơn giản, thuần GitHub. Cả hai đều hỗ trợ workflow YAML và triển khai container hóa.
Tôi có thể dùng Azure Pipelines với công nghệ không thuộc Microsoft như Python hoặc Java không?
Có, Azure Pipelines hỗ trợ mọi nền tảng và ngôn ngữ chính, bao gồm Python, Java, Node.js và nhiều hơn nữa. Bạn có thể cấu hình build và triển khai cho bất kỳ tech stack nào bằng YAML.
Azure Pipelines có miễn phí không?
Azure Pipelines có gói miễn phí với 1.800 phút/tháng cho dự án công khai và thời lượng build giới hạn cho dự án riêng tư. Sử dụng thêm cần gói trả phí hoặc tác nhân tự lưu trữ.
Azure DevOps Service Connections là gì và vì sao quan trọng?
Service Connections liên kết an toàn Azure Pipelines với các dịch vụ bên ngoài như Azure Web Apps hoặc cụm Kubernetes. Chúng rất quan trọng cho triển khai tự động và quản lý hạ tầng.
Azure Pipelines so với Jenkins hoặc CircleCI như thế nào?
Azure Pipelines mang lại trải nghiệm tích hợp tốt hơn cho người dùng Azure và hỗ trợ tốt hơn cho các dịch vụ Microsoft. Jenkins tùy biến hơn nhưng cần nhiều thiết lập; CircleCI nổi bật về tốc độ và khả năng song song.
Emmanuel Akor là Kỹ sư Cloud & DevOps, thành thạo trong việc tận dụng các công nghệ đám mây và công cụ DevOps để thúc đẩy những dự án tạo tác động. Là cử nhân loại Xuất sắc ngành Khoa học Máy tính từ Đại học Babcock và từng là Đồng Trưởng nhóm Mảng Đám mây tại GDSC, Emmanuel kết hợp nền tảng học thuật vững chắc với kinh nghiệm thực tiễn. Với vai trò Biên tập viên Nội dung Kỹ thuật, anh xuất sắc trong việc chia sẻ kiến thức và hợp tác cùng các đội ngũ.

Nếu đường ống CI/CD của bạn liên tục hỏng hoặc chậm chạp, bạn không đơn độc. Tôi từng phải xử lý các bản build thất bại, môi trường không khớp, và đồng đội vô tình ghi đè công việc của tôi. Azure Pipelines loại bỏ những phiền toái này với một dịch vụ trên đám mây có thể build, kiểm thử và triển khai hầu như mọi dự án trên mọi nền tảng.
Vì vậy trong hướng dẫn này, tôi sẽ chỉ bạn cách:
Bắt đầu thôi!
Azure Pipelines là gì?
Azure Pipelines là một giải pháp dựa trên đám mây giúp đơn giản hóa việc phát triển, kiểm thử và triển khai ứng dụng.
Đây là một thành phần của bộ công cụ Azure DevOps, hỗ trợ toàn bộ vòng đời phát triển phần mềm. Nó cũng là lựa chọn linh hoạt cho mọi quy mô đội ngũ vì hỗ trợ nhiều nền tảng và ngôn ngữ lập trình. Azure Pipelines tích hợp với GitHub, Azure Repos và các hệ thống quản lý phiên bản phổ biến khác.
Các tính năng cốt lõi của Azure Pipelines bao gồm:
Dịch vụ
Mục đích
Hỗ trợ đa nền tảng
Azure Pipelines tự động hóa việc build và triển khai ứng dụng cho nhiều hệ điều hành như Linux, macOS và Windows.
Tích hợp với hệ thống quản lý phiên bản
Azure Pipelines kết nối tới kho mã của bạn như Azure Repos, GitHub và các hệ thống quản lý phiên bản phổ biến khác.
Cấu hình pipeline bằng YAML
Azure Pipelines cho phép định nghĩa quy trình build và triển khai dưới dạng mã, giúp dễ dàng quản lý phiên bản.
Tích hợp liên tục và Triển khai liên tục (CI/CD)
Azure Pipelines hỗ trợ toàn bộ quy trình từ tích hợp thay đổi mã đến triển khai ứng dụng.
Theo kinh nghiệm của tôi, Azure Pipelines hữu ích cho bất kỳ ai muốn có CI/CD bài bản trong đội. Nó linh hoạt, có khả năng mở rộng và tích hợp tốt với các dịch vụ Azure khác.
Kiến trúc Azure Pipelines (Nguồn: Microsoft).
Nếu bạn muốn có cái nhìn rộng hơn về Azure DevOps ngoài pipelines, hướng dẫn Azure DevOps này sẽ đi qua toàn bộ vòng đời CI/CD từ đầu đến cuối.
Thiết lập Azure Pipeline đầu tiên của bạn
Để làm việc với môi trường Azure Pipelines, trước hết chúng ta cần thiết lập mọi thứ để hỗ trợ quy trình build, kiểm thử và triển khai end-to-end.
Điều kiện tiên quyết
Trước khi bắt đầu tạo pipeline đầu tiên, hãy đảm bảo bạn có những thứ sau:
Nếu bạn cần ôn lại hệ sinh thái Azure tổng quát, tôi khuyến nghị xem khóa học Understanding Microsoft Azure.
Tạo dự án và kho mã mới
Khi tài khoản và tổ chức Azure DevOps đã sẵn sàng, hãy tạo dự án và kho mã đầu tiên.
Trong hướng dẫn này, chúng ta sẽ dùng Azure Repos làm kho mã. Nếu bạn mới bắt đầu hoặc không có lý do cụ thể để chọn TFVC, tôi khuyên bạn chọn Git.
Tạo pipeline đầu tiên của bạn
Đến lúc tạo pipeline đầu tiên. Thực hiện theo các bước dưới đây:
Chọn YAML hay Classic Editor
Azure Pipelines cung cấp hai cách để định nghĩa pipeline của bạn:
.yamlhoặc.ymltrong kho mã nguồn, cho phép quản lý phiên bản và hợp tác tốt hơn.Khía cạnh
YAML Pipelines
Classic Editor
Quản lý phiên bản
YAML Pipelines hỗ trợ quản lý phiên bản và được lưu trong kho mã nguồn.
Classic Editor không hỗ trợ quản lý phiên bản. Dựa trên giao diện đồ họa (GUI).
Tính linh hoạt
YAML Pipelines có tính linh hoạt cao.
Classic Editor có tính linh hoạt hạn chế.
Phù hợp nhất cho
YAML Pipelines phù hợp nhất cho quy trình dài hạn, phức tạp và tự động hóa.
Classic Editor phù hợp với thiết lập nhanh.
Theo kinh nghiệm của tôi, YAML pipelines linh hoạt hơn và phù hợp với các đội ngũ theo đuổi thực hành Infrastructure as Code (IaC). Nhưng Classic Editor rất thích hợp cho người mới với cách làm trực quan hơn.
Tuy nhiên, để mở rộng lâu dài, nên ưu tiên YAML pipelines thay vì Classic Editor.
Build với Azure Pipelines
Giờ hãy xem cách chúng ta có thể build với Azure Pipelines.
Trong phần này, chúng ta sẽ chỉ định các bước Azure Pipelines thực hiện để build mã của bạn, như cài đặt phụ thuộc, biên dịch và chạy kiểm thử. Chúng ta sẽ mô tả các bước này trong một tệp cấu hình trong kho mã nguồn bằng YAML, một cách mô tả dễ đọc giống công thức.
Cú pháp pipeline YAML
Dưới đây là ví dụ đơn giản về một pipeline YAML:
Hãy phân tích đoạn mã theo từng phần:
trigger: Chỉ định nhánh kích hoạt pipeline (ví dụ:main).pool: Định nghĩa tác nhân build (ví dụ:ubuntu-latest).steps: Liệt kê các tác vụ cần thực thi, như cài đặt phụ thuộc và chạy script build.Cấu hình bước build
Để thêm bước build vào pipeline YAML, bạn cần định nghĩa 'script' trong phần 'steps'.
Với một ứng dụng
Node.jsđơn giản, ví dụ, tệpazure-pipelines.ymlbên dưới chứa mã mà Azure DevOps tự động tạo.Hãy xem các
stepsbuild trong pipeline YAML ở trên:NodeTool@0để chỉ định phiên bản Node.js.npm installđể cài đặt phụ thuộc của dự án.npm run buildđể biên dịch mã.Chạy pipeline
Pipeline có thể được kích hoạt thủ công hoặc tự động khi xảy ra các sự kiện như đẩy mã lên nhánh.
main, pipeline tự động chạy. Ví dụ:Sau khi chạy pipeline, bạn có thể xem log và xử lý sự cố nếu có.
Để truy cập log, vào trang tổng quan lượt chạy pipeline và chọn job hoặc tác vụ cụ thể. Điều này sẽ hiển thị log của bước đó; như hình dưới, bạn có thể chọn bất kỳ job nào (Build, Push hoặc Update) để xem log thô.
Để khắc phục sự cố thường gặp, bạn có thể kiểm tra pipeline về các vấn đề như quá thời gian (timeout), giới hạn tài nguyên hoặc cấu hình sai.
Thêm kiểm thử vào pipeline của bạn
Bạn thêm kiểm thử vào pipeline để đảm bảo chất lượng mã và phát hiện sớm vấn đề trong quá trình phát triển. Trong Azure Pipelines, bạn có thể tích hợp unit, integration hoặc các kiểm thử khác bằng cách thêm các bước trong cấu hình pipeline.
Cấu hình bước kiểm thử
Bao gồm các bước kiểm thử trong pipeline để đảm bảo chất lượng mã. Bạn có thể dùng các framework phổ biến như Jest, Mocha hoặc NUnit. Ví dụ, cách thêm unit test với Jest:
Xem kết quả kiểm thử
Azure Pipelines có sẵn báo cáo kiểm thử tích hợp. Bạn có thể thiết lập xuất bản kết quả kiểm thử để theo dõi dễ dàng hơn và xem kết quả trong log pipeline. Cách thực hiện như sau:
PublishTestResults@2để hiển thị kết quả. Điều này giúp việc theo dõi tổng thể dễ dàng hơn. Ví dụ:Triển khai với Azure Pipelines
Trong các bước triển khai trong tệp YAML của pipeline Azure, bạn có thể tự động triển khai ứng dụng tới nhiều môi trường như testing, staging và production. Phần này, chúng ta sẽ xem qua một vài cách triển khai với Azure Pipelines.
Triển khai lên Azure Web Apps
Azure Web Apps là một dịch vụ trong Azure Portal cho phép bạn phát triển, triển khai và quản lý ứng dụng web ở quy mô lớn.
Để triển khai lên Azure Web Apps, bạn cần liên kết hai dịch vụ. Cách thực hiện:
Đây là ví dụ về pipeline triển khai YAML cho một ứng dụng
Node.jsđơn giản lên Azure App Service:Hãy phân tích đoạn mã trên để bạn có thể điều chỉnh cho trường hợp của mình:
your-azure-subscriptionbằng tên kết nối dịch vụ cấp quyền truy cập đăng ký Azure của bạn.your-app-namebằng tên thực tế của web app trong Azure.$(Build.ArtifactStagingDirectory)bằng thư mục chứa gói hoặc tệp web app để triển khai.$(Build.ArtifactStagingDirectory)— Biến này trỏ tới thư mục nơi artifact build (tệp ứng dụng) của bạn nằm sau khi build xong.Thiết lập triển khai liên tục (CD)
Khi mọi thứ trong mã của chúng ta vượt qua tất cả kiểm thử và kiểm tra, bước tiếp theo là thiết lập triển khai liên tục. Thực hiện theo các bước dưới đây.
Mô hình triển khai release pipeline của Azure (Nguồn: Microsoft)
Theo kinh nghiệm của tôi, giai đoạn này cần thiết để duy trì ổn định trong môi trường phát triển đòi hỏi cao. Phê duyệt và cổng cung cấp kiểm soát và đảm bảo chỉ có mã chất lượng cao mới lên production.
Triển khai lên Kubernetes
Kubernetes giúp chạy ứng dụng dạng container đáng tin cậy và có khả năng mở rộng. Khi dùng Azure Kubernetes Service (AKS), bạn có môi trường được quản lý, đơn giản hóa việc triển khai và vận hành. Phần này, tôi sẽ hướng dẫn cách triển khai ứng dụng của bạn lên AKS bằng Azure Pipelines.
Chuẩn bị cụm AKS của bạn
Bạn có thể tạo cụm AKS bằng Azure portal hoặc CLI. Đây là lệnh Bash CLI cơ bản để cấp phát cụm:
Hãy phân tích lệnh trên:
--resource-group: Chỉ định nhóm tài nguyên Azure nơi cụm AKS sẽ được tạo.--name: Tên cụm AKS của bạn.--node-count: Số node trong cụm (ví dụ: 3 trong ví dụ này).--enable-addons monitoring: Kích hoạt giám sát và phân tích với Azure Monitor for Containers.--generate-ssh-keys: Tự động tạo khóa SSH để truy cập node an toàn nếu chưa có.Đừng quên thay
<ResourceGroupName>và<AKSClusterName>bằng tên nhóm tài nguyên và cụm thực tế của bạn.Sau khi cụm AKS được thiết lập, cần cấu hình Kubectl. Điều này đảm bảo tác nhân pipeline hoặc máy cục bộ của bạn có thể dùng
kubectlđể giao tiếp với cụm.Bạn có thể tăng tốc tác vụ Azure bằng dòng lệnh—Azure CLI cheat sheet này là tài liệu tham khảo hữu ích.
Tạo tệp YAML triển khai
Hãy lấy ví dụ một tệp YAML triển khai cơ bản để triển khai một ảnh Docker lên Kubernetes:
Triển khai bằng Azure Pipelines
Trong pipeline YAML của bạn, thêm một tác vụ để triển khai lên AKS.
Commit và đẩy tệp YAML để kích hoạt triển khai.
AKS đơn giản hóa việc điều phối container, giúp quản lý scale, cập nhật và rollback dễ dàng hơn. Theo kinh nghiệm của tôi, đây là mảnh ghép không thể thiếu cho các ứng dụng cloud-native hiện đại.