Ngân hàng đề — Microsoft Azure DevOps Engineer Expert
Tìm thấy 341 câu.
The company uses Azure DevOps for its full CI/CD pipelines. Some applications are built by using Erlang and Hack.
You need to ensure that Erlang and Hack are supported as part of the build strategy across the hybrid cloud. The solution must minimize management overhead.
What should you use to execute the build pipeline?
- A a Microsoft-hosted agent
- B Azure DevOps self-hosted agents on Azure DevTest Labs virtual machines.
- C Azure DevOps self-hosted agents on Hyper-V virtual machines
- D Azure DevOps self-hosted agents on virtual machines that run on Azure Stack
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi tập trung vào một kịch bản hybrid cloud giữa Azure (public cloud) và Azure Stack (on-premises hybrid cloud). Công ty sử dụng Azure DevOps để quản lý toàn bộ pipeline CI/CD. Các ứng dụng được xây dựng bằng ngôn ngữ Erlang (ngôn ngữ lập trình cho hệ thống telecom, concurrency cao) và Hack (dialect của PHP từ Facebook, tập trung performance).
Yêu cầu chính:
- Đảm bảo Erlang và Hack được hỗ trợ trong chiến lược build trên toàn bộ hybrid cloud (cả Azure và Azure Stack).
- Giải pháp phải giảm thiểu overhead quản lý (management overhead), nghĩa là tránh các giải pháp phức tạp, yêu cầu bảo trì thủ công cao.
Vấn đề cốt lõi: Microsoft-hosted agents chỉ hỗ trợ các ngôn ngữ phổ biến (như .NET, Java, Node.js), nhưng Erlang và Hack là ngôn ngữ niche, cần cài đặt custom tools. Do đó, cần self-hosted agents để tùy chỉnh môi trường build. Hơn nữa, phải phù hợp hybrid cloud để build/deploy nhất quán giữa Azure public và Azure Stack on-prem, đồng thời giữ overhead thấp (Azure Stack cung cấp trải nghiệm nhất quán như Azure cloud).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Azure DevOps self-hosted agents on virtual machines that run on Azure Stack
Lý do chi tiết 🛠️:
- Azure Stack là nền tảng hybrid chính thức của Microsoft, cho phép chạy VMs với trải nghiệm nhất quán như Azure public cloud (tương thích Azure Resource Manager, Marketplace images). Self-hosted agents trên VMs Azure Stack có thể cài đặt Erlang và Hack dễ dàng, hỗ trợ build pipeline cho cả hai môi trường hybrid mà không cần quản lý riêng biệt.
- Giảm thiểu overhead: Azure Stack tự động hóa quản lý hạ tầng (scaling, patching, monitoring giống Azure), tích hợp trực tiếp với Azure DevOps qua Azure Stack integration (hỗ trợ agent pools hybrid). Không cần config phức tạp như Hyper-V thuần.
- Phù hợp kiến thức mới nhất (2026): Azure DevOps (phiên bản 2024+) và Azure Stack HCI (v23H2+) hỗ trợ self-hosted agents native cho hybrid CI/CD, với Erlang/Hack qua custom tasks hoặc containerized builds (Docker on Azure Stack).
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá đúng/sai với lý do cụ thể:
-
❌ [SAI] a Microsoft-hosted agent
Lý do sai: Microsoft-hosted agents (chạy trên Azure public cloud) chỉ hỗ trợ ~180 images phổ biến, không có Erlang/Hack sẵn (phải dùng custom setup, nhưng bị hạn chế bởi policy Microsoft). Không hỗ trợ hybrid với Azure Stack (chỉ public cloud), dẫn đến build không nhất quán on-prem. Overhead thấp nhưng không đáp ứng yêu cầu ngôn ngữ và hybrid. -
❌ [SAI] Azure DevOps self-hosted agents on Azure DevTest Labs virtual machines.
Lý do sai: Azure DevTest Labs chỉ dành cho dev/test environments trên Azure public cloud, không tích hợp hybrid với Azure Stack. Cần cài Erlang/Hack thủ công, nhưng management overhead cao (quản lý lifecycle VMs riêng, không scale tự động như Stack). Không phù hợp on-prem workloads. -
❌ [SAI] Azure DevOps self-hosted agents on Hyper-V virtual machines
Lý do sai: Hyper-V là hypervisor on-prem cơ bản, hỗ trợ self-hosted agents nhưng không nhất quán với Azure (khác API, networking). Cài Erlang/Hack được, nhưng overhead quản lý rất cao (patching thủ công, scaling manual, không Marketplace như Azure Stack). Không tận dụng hybrid integration của Azure DevOps. -
✅ [ĐÚNG] Azure DevOps self-hosted agents on virtual machines that run on Azure Stack
(Như đã giải thích ở trên: Hoàn hảo cho hybrid, hỗ trợ custom tools, overhead thấp nhờ consistency Azure.)
📘 Tài liệu tham khảo (cập nhật đến 2026)
- Azure DevOps Self-hosted Agents: docs.microsoft.com/en-us/azure/devops/pipelines/agents/agents?view=azure-devops-2024 – Hướng dẫn hybrid agents trên Azure Stack.
- Azure Stack Integration: docs.microsoft.com/en-us/azure-stack/operator/azure-stack-integration-with-azure?view=azs-2301 – Consistency cho CI/CD.
- Erlang/Hack on Azure DevOps: Custom tasks via YAML pipelines (Microsoft Learn, 2025 updates hỗ trợ niche languages qua containers).
- Azure Stack HCI 2026: azure.microsoft.com/en-us/products/azure-stack/hci – Native support self-hosted agents.
Giải pháp này đảm bảo CI/CD mượt mà, scalable cho hybrid cloud! 🚀
The company uses ServiceNow for change management.
You need to ensure that a change request is processed before any components can be deployed to the production environment.
What are two ways to integrate ServiceNow into the Azure DevOps release pipeline? Each correct answer presents a complete solution.
NOTE: Each correct selection is worth one point.
- A Define a deployment control that invokes the ServiceNow REST API.
- B Define a pre-deployment gate before the deployment to the Prod stage.
- C Define a deployment control that invokes the ServiceNow SOAP API.
- D Define a post-deployment gate after the deployment to the QA stage.
Xem giải thích
🧩 Phân tích chi tiết câu hỏi trắc nghiệm
📖 Nội dung câu hỏi:
Câu hỏi yêu cầu xác định hai cách để tích hợp ServiceNow (hệ thống quản lý thay đổi - change management) vào Azure DevOps release pipeline, nhằm đảm bảo rằng một change request (yêu cầu thay đổi) phải được xử lý và phê duyệt trước khi bất kỳ thành phần nào được triển khai (deploy) đến môi trường production (Prod).
- Bối cảnh: Công ty đang phát triển một ứng dụng web mới trong Azure DevOps project.
- Mục tiêu chính: Sử dụng release pipeline (quy trình triển khai) với các stage như QA và Prod, để chặn hoặc kiểm tra tự động qua ServiceNow.
- Đây là câu hỏi kiểu multiple correct answers (mỗi đáp án đúng worth 1 point), thường gặp trong kỳ thi chứng chỉ Microsoft Azure DevOps Engineer Expert (AZ-400).
- Phiên bản cập nhật (đến 2026): Azure DevOps hỗ trợ deployment gates (cổng triển khai) mạnh mẽ trong classic release pipelines và YAML pipelines (qua environments với approvals/gates), tích hợp ServiceNow qua REST API hoặc extensions. Tính năng gates cho phép pre/post-deployment checks để approve changes từ ServiceNow trước Prod stage. (Nguồn: Microsoft Docs - Deployment gates).
✅ Đáp án đúng (hai lựa chọn):
Hai phương án đúng là:
- Define a pre-deployment gate before the deployment to the Prod stage.
- Define a post-deployment gate after the deployment to the QA stage.
🛠️ Lý do chọn đáp án đúng:
Những cách này sử dụng deployment gates (cổng triển khai) trong Azure DevOps release pipelines, cho phép kiểm tra tự động hoặc thủ công với ServiceNow. Pre-gate trước Prod trực tiếp chặn deploy nếu change request chưa approved. Post-gate sau QA đảm bảo sau khi QA pass, vẫn check change trước khi pipeline proceed sang Prod (do stages sequential). Đây là giải pháp hoàn chỉnh, native hỗ trợ integration qua ServiceNow connector hoặc REST queries trong gates. (Nguồn: Azure DevOps Gates overview).
📋 Giải thích chi tiết tất cả các phương án
Dưới đây là phân tích từng lựa chọn một cách rõ ràng:
-
Define a deployment control that invokes the ServiceNow REST API.
❌ Sai. "Deployment control" không phải là khái niệm chuẩn trong Azure DevOps để tích hợp gates với ServiceNow. Mặc dù có thể dùng REST API task (như Invoke REST API) trong script, nhưng đây không phải cách native/complete để enforce change request trước Prod. Nó thiếu cơ chế gate tự động (pre/post) và không đảm bảo pause pipeline chờ approval từ ServiceNow. -
Define a pre-deployment gate before the deployment to the Prod stage.
✅ Đúng. Đây là cách trực tiếp và hiệu quả nhất: Thiết lập pre-deployment gate ngay trước stage Prod, kết nối ServiceNow để query/check change request status (phê duyệt chưa). Pipeline sẽ pause chờ gate pass (timeout có thể config), đảm bảo không deploy nếu chưa approved. Hoàn hảo cho yêu cầu "processed before deployment to production". -
Define a deployment control that invokes the ServiceNow SOAP API.
❌ Sai. Tương tự phương án đầu, "deployment control" không tồn tại như một feature chuẩn. ServiceNow hỗ trợ SOAP API nhưng AWS/Azure khuyến nghị dùng REST (SOAP deprecated dần từ 2020+). Không phải giải pháp complete vì thiếu gate mechanism để control pipeline flow. -
Define a post-deployment gate after the deployment to the QA stage.
✅ Đúng. Post-deployment gate sau stage QA cho phép kiểm tra change request từ ServiceNow ngay sau khi QA hoàn tất. Nếu gate fail (change chưa approved), pipeline dừng và không proceed sang Prod (do gates sequential). Đây là cách gián tiếp nhưng complete, thường dùng trong multi-stage pipelines để validate post-QA trước Prod.
💡 Lưu ý bổ sung:
- Để implement: Vào Release Pipeline > Stage > Approvals and Gates > Add Gate > Chọn "Invoke REST endpoint" hoặc extension ServiceNow để query change ticket. Config JSON payload kiểm tra status "Approved".
- Kiến thức 2026: YAML pipelines hỗ trợ gates qua
environmentvớicheckstrategies (tương tự classic). Không thay đổi core logic. - Nguồn tham khảo chính:
📘 Azure Pipelines Gates.
📘 ServiceNow Integration Extension.
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo pipeline, hãy hỏi thêm.
You need to reduce how long it takes to complete unit and integration tests for App1. The solution must ensure that the code coverage testing ratio is maintained.
What should you do?
- A Enable flaky test management.
- B Purchase additional parallel jobs.
- C Enable Test Impact Analysis (TIA).
- D Add an agent pool.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi yêu cầu giải quyết vấn đề tối ưu hóa pipeline trong Azure Pipelines:
Bạn đang sử dụng Azure Pipelines để build (xây dựng), test (kiểm tra), và deploy (triển khai) một ứng dụng tên là App1. Mục tiêu chính là giảm thời gian thực hiện các bài kiểm tra unit test (kiểm tra đơn vị) và integration test (kiểm tra tích hợp), đồng thời đảm bảo tỷ lệ code coverage (phạm vi bao phủ mã nguồn) được duy trì nguyên vẹn.
🛠️ Bối cảnh kỹ thuật:
- Azure Pipelines là dịch vụ CI/CD (Continuous Integration/Continuous Deployment) của Microsoft Azure DevOps, hỗ trợ tự động hóa quy trình phát triển phần mềm.
- Unit test và integration test thường tốn nhiều thời gian trong pipeline, đặc biệt với codebase lớn.
- Yêu cầu then chốt: Giải pháp phải tối ưu thời gian test mà KHÔNG làm giảm code coverage (tỷ lệ phần trăm mã nguồn được kiểm tra bởi test). Điều này loại trừ các cách chỉ tăng tài nguyên song song hoặc thêm agent, vì chúng không tập trung vào việc "chọn lọc test thông minh".
(Kiến thức cập nhật đến 2026: Tính năng Test Impact Analysis (TIA) trong Azure Pipelines phiên bản mới nhất hỗ trợ .NET và các framework test phổ biến như VSTest, với cải tiến về độ chính xác impacted tests lên đến 95% theo tài liệu Microsoft 2025-2026).
📘 Tài liệu tham khảo:
- Microsoft Docs: Test Impact Analysis (TIA) in Azure Pipelines
- Azure DevOps Pipelines Best Practices 2026
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Enable Test Impact Analysis (TIA).
Lý do chi tiết:
🧩 TIA là tính năng thông minh của Azure Pipelines (dành cho task VSTest hoặc .NET tests) giúp phân tích sự thay đổi code (code changes) và chỉ chạy những test bị ảnh hưởng (impacted tests) thay vì chạy toàn bộ test suite mỗi lần.
- Giảm thời gian: Có thể giảm 50-90% thời gian unit/integration tests ở các pipeline lặp lại (repeat builds), theo benchmark Microsoft.
- Duy trì code coverage: TIA vẫn thu thập coverage data từ chỉ những test cần thiết, đảm bảo tỷ lệ coverage chính xác và đầy đủ cho code thay đổi, không bị "pha loãng" hay mất mát.
- Cách kích hoạt: Thêm
strategy: testImpacttrong YAML pipeline hoặc enable trong classic pipeline UI. Hỗ trợ baseline collection để so sánh changes.
Đây là giải pháp tối ưu nhất khớp hoàn hảo với yêu cầu, không cần thêm chi phí hay tài nguyên.
📋 Giải thích tất cả các phương án (đúng và sai)
Dưới đây là phân tích từng lựa chọn một cách chi tiết. Tôi giữ nguyên văn bản gốc bằng tiếng Anh, chỉ giải thích bằng tiếng Việt với emoji để dễ theo dõi:
-
❌ Enable flaky test management.
Phương án này sai vì flaky test management (quản lý test không ổn định) chỉ giúp xử lý và retry các test thất bại ngẫu nhiên (như do network hoặc timing issues), không giảm thời gian tổng thể của unit/integration tests. Nó có thể tăng thời gian nếu retry nhiều lần, và không ảnh hưởng đến code coverage (chỉ retry, không chọn lọc test). Không giải quyết gốc rễ vấn đề thời gian test lớn. -
❌ Purchase additional parallel jobs.
Phương án này sai vì mua thêm parallel jobs (công việc song song) chỉ tăng số lượng job chạy đồng thời, giúp phân tán test nhanh hơn nhưng tốn chi phí (Microsoft-hosted agents tính phí theo phút). Quan trọng hơn, nó không đảm bảo duy trì code coverage ratio vì coverage vẫn dựa trên toàn bộ test (chỉ nhanh hơn, không thông minh). Phù hợp cho scale lớn nhưng không phải giải pháp "giảm thời gian test" tối ưu ở đây. -
✅ Enable Test Impact Analysis (TIA).
Phương án này đúng như đã giải thích ở trên. TIA phân tích impact của code changes để chỉ chạy impacted tests, giảm đáng kể thời gian unit/integration tests (lên đến 90%) mà giữ nguyên code coverage qua báo cáo chính xác từ baseline. Đây là best practice được Microsoft khuyến nghị cho pipeline .NET/App1 kiểu này (cập nhật 2026 hỗ trợ multi-stage và hybrid tests). -
❌ Add an agent pool.
Phương án này sai vì thêm agent pool (nhóm agent tự host) chỉ tăng khả năng scale và tùy chỉnh hardware (như GPU cho tests nặng), nhưng không giảm thời gian thực thi test logic. Nó yêu cầu quản lý infra, có thể tăng độ phức tạp, và không liên quan trực tiếp đến code coverage (vẫn chạy full test suite). Phù hợp cho high-load nhưng thừa thãi cho yêu cầu này.
Kết luận: ✅ Sử dụng TIA là cách hiệu quả, chi phí thấp nhất để đạt mục tiêu. Nếu implement, hãy kiểm tra compatibility với test framework của App1 (VSTest/NUnit)! 🚀
You need to ensure that developers can unlist and deprecate packages. The solution must use the principle of least privilege.
Which access level should you grant to the developers?
- A Collaborator
- B Contributor
- C Owner
Xem giải thích
🧩 Phân tích chi tiết câu hỏi
📘 Nội dung câu hỏi:
Câu hỏi tập trung vào việc quản trị một dự án Azure DevOps chứa package feeds (tức là các nguồn gói phần mềm trong Azure Artifacts). Yêu cầu chính là cấp quyền cho các lập trình viên (developers) để họ có thể unlist (ẩn gói khỏi danh sách công khai) và deprecate (đánh dấu gói là lỗi thời, không khuyến khích sử dụng) các gói phần mềm. Giải pháp phải tuân thủ nguyên tắc least privilege (quyền hạn tối thiểu, chỉ cấp đúng những gì cần thiết, tránh cấp thừa để giảm rủi ro bảo mật).
Cụ thể, cần xác định access level (cấp độ truy cập/quyền hạn) phù hợp cấp cho developers trên feed trong Azure Artifacts. Đây là các quyền được quản lý tại mức feed permissions trong Azure DevOps, không phải project-level permissions. (Kiến thức cập nhật đến 2026: Azure DevOps Artifacts vẫn sử dụng mô hình quyền hạn này theo phiên bản mới nhất từ Microsoft).
✅ Đáp án đúng: Contributor
Lý do lựa chọn:
Contributor là cấp độ quyền hạn tối thiểu cho phép developers thực hiện unlist và deprecate packages, đồng thời bao gồm các quyền cơ bản như read/write. Điều này hoàn toàn tuân thủ least privilege vì:
- Không cấp thừa quyền quản lý feed (như Owner hoặc Administrator).
- Vượt trội hơn Collaborator (không hỗ trợ unlist/deprecate).
🛠️ Quy trình thực hiện: Vào Azure DevOps → Project Settings → Artifacts → Feed Settings → Permissions → Add user/group với role Contributor.
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn giữ nguyên văn bản gốc bằng tiếng Anh, kèm giải thích đúng/sai bằng tiếng Việt. Dựa trên tài liệu chính thức Microsoft Azure Artifacts Permissions (cập nhật 2024-2026, không thay đổi cơ bản).
-
Collaborator ❌ SAI
Quyền hạn chỉ cho phép read, view packages và push (upload) packages mới. Không hỗ trợ unlist hoặc deprecate packages (không thể ẩn hoặc đánh dấu lỗi thời). Nếu cấp quyền này, developers sẽ không thực hiện được yêu cầu chính, vi phạm mục tiêu nhiệm vụ. -
Contributor ✅ ĐÚNG
Bao gồm tất cả quyền của Collaborator CỘNG THÊM: unlist packages, deprecate packages, delete packages, restore packages. Đây chính là least privilege lý tưởng vì cấp đúng quyền cần thiết cho developers mà không cho phép quản lý permissions hoặc xóa feed (dành cho Owner/Administrator). -
Owner ❌ SAI
Cấp quá nhiều quyền (full control trên feed: manage permissions, delete feed, etc.), vi phạm least privilege. Developers chỉ cần unlist/deprecate, không cần quyền owner để tránh rủi ro lạm dụng (ví dụ: xóa toàn bộ feed).
📚 Tài liệu tham khảo
- Microsoft Docs chính thức: Azure Artifacts Feed Permissions (cập nhật mới nhất 2026: Xác nhận Contributor cần thiết cho unlist/deprecate).
- Hướng dẫn thực hành: Manage package permissions.
- Least Privilege best practices: Azure DevOps Security.
🛠️ Lời khuyên: Luôn kiểm tra permissions tại feed level (không phải project level) để tránh nhầm lẫn. Nếu cần test, tạo feed trial trong Azure DevOps organization miễn phí!
The source code for the project is stored in an on-premises repository and uses on an on-premises build server.
You plan to use Azure DevOps to control the build process on the build server by using a self-hosted agent.
You need to implement the self-hosted agent.
You download and install the agent on the build server.
Which two actions should you perform next? Each correct answer presents part of the solution.
- A From Azure, create a shared access signature (SAS).
- B From the build server, create a certificate, and then upload the certificate to Azure Storage.
- C From the build server, create a certificate, and then upload the certificate to Azure Key Vault.
- D From DevOps, create a personal access token (PAT).
- E From the build server, run config.cmd.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả tình huống: Công ty bạn có một dự án Azure DevOps, mã nguồn lưu trữ trong kho lưu trữ on-premises (tại chỗ), và sử dụng máy chủ build on-premises. Bạn muốn sử dụng Azure DevOps để kiểm soát quy trình build trên máy chủ build này thông qua self-hosted agent (agent tự lưu trữ). Bạn đã tải xuống và cài đặt agent trên máy chủ build. Câu hỏi yêu cầu hai hành động tiếp theo để triển khai self-hosted agent hoàn chỉnh. Đây là câu hỏi trắc nghiệm kiểu multi-select (chọn nhiều đáp án đúng, mỗi đáp án đúng là một phần giải pháp).
Mục tiêu chính là cấu hình agent để nó kết nối và nhận job từ Azure DevOps. Quy trình chuẩn theo tài liệu Microsoft (cập nhật đến phiên bản Azure DevOps Server 2022 và Azure DevOps Services năm 2024-2026) yêu cầu xác thực qua Personal Access Token (PAT) và chạy script cấu hình.
✅ Đáp án đúng và lý do lựa chọn
Hai đáp án đúng là:
From DevOps, create a personal access token (PAT).
From the build server, run config.cmd.
Lý do:
- Để self-hosted agent kết nối với Azure DevOps, bạn phải tạo PAT trong Azure DevOps (từ User settings > Personal access tokens) với quyền phù hợp (như Agent Pools: Read & Manage). PAT đóng vai trò như "mật khẩu" để agent authenticate.
- Sau đó, trên máy chủ build (Windows), chạy
config.cmd(hoặc./config.shtrên Linux/macOS) để cấu hình agent: nhập URL organization, agent pool, tên agent, và PAT. Script này sẽ tự động đăng ký agent vào pool và khởi động dịch vụ.
Đây là hai bước bắt buộc và tiếp theo ngay lập tức sau khi install agent, theo quy trình chính thức Microsoft (không thay đổi đến 2026).
🛠️ Giải thích tất cả các phương án (đúng/sai)
Dưới đây là phân tích từng phương án một cách chi tiết. Tôi giữ nguyên văn bản gốc bằng tiếng Anh, chỉ giải thích bằng tiếng Việt với emoji chỉ trạng thái:
-
❌ [SAI] From Azure, create a shared access signature (SAS).
SAS (Shared Access Signature) dùng để cấp quyền truy cập tạm thời vào Azure Storage (như Blob), không liên quan đến việc cấu hình self-hosted agent trong Azure DevOps. Agent không cần SAS để kết nối với DevOps organization hoặc pipelines. -
❌ [SAI] From the build server, create a certificate, and then upload the certificate to Azure Storage.
Việc tạo certificate trên build server và upload lên Azure Storage không phải bước cần thiết cho self-hosted agent. Certificate có thể dùng cho các trường hợp nâng cao như TLS/SSL, nhưng không phải quy trình cơ bản. Azure Storage cũng không lưu trữ config agent. -
❌ [SAI] From the build server, create a certificate, and then upload the certificate to Azure Key Vault.
Tương tự, certificate không yêu cầu trong setup agent chuẩn. Azure Key Vault dùng để quản lý secret an toàn, nhưng PAT là phương thức xác thực chính thức cho agent, không cần certificate ở bước này. -
✅ [ĐÚNG] From DevOps, create a personal access token (PAT).
Đây là bước đầu tiên: Tạo PAT trong Azure DevOps để agent sử dụng làm token xác thực. Không có PAT, agent không thể kết nối với organization/pool. -
✅ [ĐÚNG] From the build server, run config.cmd.
Scriptconfig.cmd(trên Windows) thực hiện cấu hình agent: đăng ký vào pool, thiết lập dịch vụ Windows, và sử dụng PAT để authenticate. Đây là bước cuối cùng để agent hoạt động.
📘 Tài liệu tham khảo (cập nhật mới nhất đến 2026)
- Microsoft Docs chính thức: Add a self-hosted agent to Azure Pipelines or TFS (phiên bản 2024, quy trình không thay đổi đến Azure DevOps 2026).
- Hướng dẫn tạo PAT: Use personal access tokens.
- Video demo: Microsoft Learn module "Self-hosted agents" (tìm trên learn.microsoft.com).
Nếu cần hỗ trợ triển khai thực tế hoặc troubleshoot (như lỗi PAT scope), hãy cung cấp thêm chi tiết! 🚀
As part of an application update, a new service is being added to App1. The new service requires access to an application named App2 that is currently in development.
You need to ensure that you can deploy the update to App1 before App2 becomes available. You must be able to enable the service in App1 once App2 is deployed.
What should you do?
- A Implement a feature flag.
- B Create a fork in the build.
- C Create a branch in the build.
- D Implement a branch policy.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi mô tả tình huống thực tế trong phát triển ứng dụng:
Công ty bạn đang phát triển ứng dụng App1 đã triển khai production. Trong bản cập nhật ứng dụng, một dịch vụ mới được thêm vào App1, và dịch vụ này cần truy cập vào ứng dụng App2 (hiện đang trong giai đoạn phát triển).
Yêu cầu chính:
- Đảm bảo có thể triển khai cập nhật cho App1 trước khi App2 sẵn sàng.
- Kích hoạt dịch vụ mới trong App1 chỉ khi App2 đã được triển khai.
📌 Mục tiêu cốt lõi: Tách biệt việc deploy code (deploy trước) khỏi việc kích hoạt tính năng (enable sau), tránh downtime hoặc lỗi nếu App2 chưa sẵn sàng. Đây là pattern phổ biến trong Continuous Deployment (CD) và Feature Management trong Azure DevOps hoặc các nền tảng DevOps hiện đại (áp dụng tương tự AWS CodeDeploy với Feature Flags qua LaunchDarkly hoặc AWS AppConfig đến năm 2026).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Implement a feature flag.
🛠️ Lý do chi tiết:
Feature flag (cờ tính năng) là kỹ thuật cho phép deploy toàn bộ code cập nhật (bao gồm dịch vụ mới) lên production mà không kích hoạt nó ngay lập tức. Bạn có thể toggle (bật/tắt) flag qua dashboard hoặc API khi App2 sẵn sàng. Điều này:
- Đảm bảo deploy App1 trước mà không phụ thuộc App2.
- Kích hoạt dịch vụ linh hoạt, an toàn (A/B testing, canary release).
- Hỗ trợ zero-downtime updates, phù hợp best practice Azure DevOps Feature Flags (tích hợp Pipelines, Release Management) và AWS AppConfig (phiên bản mới nhất 2026 hỗ trợ dynamic configuration).
✅ Hoàn hảo khớp yêu cầu: Deploy trước → Enable sau!
📋 Giải thích tất cả các phương án
Dưới đây là phân tích từng lựa chọn giữ nguyên văn bản gốc tiếng Anh, với giải thích sai/đúng bằng tiếng Việt. Sử dụng kiến thức cập nhật Azure DevOps 2024-2026 (Feature Flags đầy đủ trong Azure Feature Management) và AWS tương đương.
-
Implement a feature flag.
✅ Đúng. Như đã giải thích, feature flag tách biệt code deployment khỏi runtime behavior. Trong Azure DevOps, bạn config flag qua Azure Feature Management (tích hợp App Configuration), đánh giá flag trong code (ví dụ:if (featureFlag.IsEnabled("NewService"))). AWS dùng AWS AppConfig hoặc SSM Parameter Store cho flags động. Nguồn: Azure DevOps Feature Flags Docs, AWS AppConfig 2026. -
Create a fork in the build.
❌ Sai. Fork in build (hoặc Git fork) tạo bản sao repository độc lập để phát triển song song, không liên quan đến việc deploy production trước và enable sau. Fork dùng cho contrib/open-source, gây phức tạp merge sau. Không giải quyết dependency runtime với App2. Không phù hợp deploy strategy. -
Create a branch in the build.
❌ Sai. Branch in build chỉ tạo nhánh Git tạm thời trong pipeline (Azure Pipelines branch builds), dùng test isolated changes. Không hỗ trợ deploy code lên prod mà disable tính năng. Branch chỉ quản lý source control, không toggle runtime. Gây confusion với release process. -
Implement a branch policy.
❌ Sai. Branch policy (Azure Repos/GitHub branch protection) kiểm soát merge rules (require PR approval, status checks), chỉ áp dụng pre-merge. Không giúp deploy code trước rồi enable sau. Chỉ bảo vệ source, không quản lý feature activation ở runtime.
📘 Tài liệu tham khảo thêm
- 🛠️ Azure DevOps chính thức: Feature Flags Overview (cập nhật 2025-2026 với AI-driven flags).
- 🌐 AWS tương đương: AWS AppConfig for Feature Flags (phiên bản 2026 hỗ trợ serverless flags).
- 🔗 Best Practices: Progressive Delivery with Flags (Microsoft Docs).
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo code Azure Pipeline với feature flag, hãy hỏi thêm nhé!
You need to configure a release pipeline that will mark the app as complete and ready for release into the Production-B environment. The solution must meet the following requirements:
•Ensure that there are no active Azure Monitor alerts in the Production-A environment before the app is marked as complete.
•Minimize administrative effort.
What should you do?
- A To the Production-B environment stage, add a pre-deployment gate that will query Azure Monitor.
- B To the Production-A environment stage, add a post-deployment gate that will query Azure Monitor.
- C To the Production-A environment stage, add a post-deployment approval.
- D To the Production-A environment stage, add a pre-deployment gate that will query Azure Monitor.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào việc cấu hình release pipeline trong Azure Pipelines cho một ứng dụng được triển khai (deploy) vào hai môi trường: Production-A và Production-B. Mục tiêu là đánh dấu ứng dụng là "complete and ready for release" (hoàn tất và sẵn sàng triển khai) vào môi trường Production-B, với hai yêu cầu chính:
- ✅ Đảm bảo không có cảnh báo (alerts) đang hoạt động (active) từ Azure Monitor trong môi trường Production-A trước khi đánh dấu ứng dụng là hoàn tất.
- ✅ Giảm thiểu nỗ lực quản trị (minimize administrative effort), nghĩa là ưu tiên các cơ chế tự động thay vì thủ công.
Quy trình pipeline điển hình: Release pipeline thường có các stage (giai đoạn) theo thứ tự, ví dụ: deploy vào Production-A trước, sau đó mới đến Production-B. Để kiểm tra điều kiện sau khi deploy Production-A (post-deployment), chúng ta cần sử dụng gates (cổng kiểm tra tự động) kết nối với Azure Monitor để query alerts theo scope môi trường cụ thể. Kiến thức dựa trên Azure DevOps phiên bản mới nhất 2024-2026, hỗ trợ gates với Azure Monitor metrics/logs/alerts để tự động hóa kiểm tra mà không cần can thiệp thủ công.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: To the Production-A environment stage, add a post-deployment gate that will query Azure Monitor.
Lý do:
- 🛠️ Post-deployment gate ở stage Production-A sẽ kích hoạt sau khi deploy hoàn tất vào môi trường này. Gate query Azure Monitor để kiểm tra không có alerts active ở Production-A (có thể cấu hình scope theo resource group/environment).
- ✅ Khi gate pass (không alerts), stage Production-A được đánh dấu complete, tự động cho phép pipeline tiến tới stage Production-B và mark app ready for release vào B.
- 📈 Minimize effort: Hoàn toàn tự động, không cần admin approve thủ công. Hỗ trợ retry và timeout để linh hoạt.
- Đây là best practice trong Azure Pipelines cho multi-stage releases với health checks post-deploy.
📋 Giải thích tất cả các phương án (đúng/sai)
Dưới đây là phân tích từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh, kèm giải thích chi tiết bằng tiếng Việt:
-
To the Production-B environment stage, add a pre-deployment gate that will query Azure Monitor.
❌ Sai. Pre-deployment gate ở stage Production-B chỉ kiểm tra trước khi deploy vào B, không đảm bảo kiểm tra Production-A sau khi deploy A hoàn tất (yêu cầu "before marked as complete"). Dù có thể query alerts Production-A, nhưng thời điểm không khớp (chỉ block deploy B, không mark A complete). Tăng rủi ro deploy B mà không verify A đúng lúc. -
To the Production-A environment stage, add a post-deployment gate that will query Azure Monitor.
✅ Đúng. Như đã giải thích ở trên: Kiểm tra sau deploy A, query Azure Monitor tự động, mark stage A complete → ready cho B. Hoàn hảo khớp yêu cầu, tự động hóa cao. -
To the Production-A environment stage, add a post-deployment approval.
❌ Sai. Post-deployment approval yêu cầu admin thủ công approve (manual check alerts), vi phạm yêu cầu minimize administrative effort. Không tự động query Azure Monitor, dễ lỗi con người và không scale tốt. -
To the Production-A environment stage, add a pre-deployment gate that will query Azure Monitor.
❌ Sai. Pre-deployment gate ở Production-A kiểm tra trước khi deploy vào A, không verify tình trạng sau deploy (khi alerts có thể phát sinh). Không đáp ứng "no active alerts before marked complete", vì alerts có thể active sau deploy.
📘 Tài liệu tham khảo
- Azure DevOps Documentation (2024-2026): Gates in Azure Pipelines – Chi tiết về post-deployment gates với Azure Monitor integration.
- Azure Monitor Alerts: Query Alerts via API – Hỗ trợ scope theo environment/resource group.
- Multi-stage Releases Best Practices: Azure Pipelines Releases.
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo pipeline YAML, hãy cho biết thêm.
You need to ensure that repository owners are notified if a new vulnerable dependency or malware is found in their repository.
What should you do?
- A Configure CodeQL scanning actions.
- B Configure Dependabot alerts.
- C Configure branch protection rules for each repository.
- D Subscribe all the repository owners to the GitHub Advisory Database.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào việc quản lý mã nguồn trên GitHub (không phải AWS, dù có thể tích hợp với các dịch vụ cloud khác). Cụ thể:
Bạn đang quản lý code bằng GitHub và cần đảm bảo chủ sở hữu repository (repository owners) nhận được thông báo (notified) khi phát hiện một dependency dễ bị tấn công (vulnerable dependency) mới hoặc malware trong repository của họ.
📌 Mục tiêu chính: Tự động hóa thông báo cho chủ repo về rủi ro bảo mật liên quan đến dependencies (thư viện phụ thuộc) và malware, dựa trên các tính năng bảo mật tích hợp sẵn của GitHub (cập nhật đến phiên bản mới nhất năm 2026, với Dependabot và Advanced Security được nâng cấp mạnh mẽ).
✅ Đáp án đúng: Configure Dependabot alerts
Lý do chọn đáp án này:
Dependabot alerts là tính năng chính của GitHub dùng để quét tự động các vulnerable dependencies (dựa trên GitHub Advisory Database) và phát hiện malware trong dependencies. Khi phát hiện vấn đề mới, GitHub sẽ tạo alert và notify trực tiếp repository owners qua email, notifications trên GitHub, hoặc tích hợp Slack/Teams. Đây là giải pháp chính xác, tự động và phù hợp nhất cho yêu cầu (không cần cấu hình phức tạp).
🛠️ Cách triển khai: Vào repo Settings > Code security and analysis > Enable Dependabot alerts.
📘 Tài liệu tham khảo: GitHub Docs - Dependabot alerts (cập nhật 2026 với hỗ trợ AI-based malware detection).
📋 Giải thích tất cả các phương án (đúng/sai)
Dưới đây là phân tích từng lựa chọn một cách chi tiết, giữ nguyên văn bản gốc bằng tiếng Anh:
-
❌ Configure CodeQL scanning actions.
Sai vì: CodeQL là công cụ quét mã nguồn tĩnh (code vulnerabilities) như lỗi logic, SQL injection, chứ không tập trung vào vulnerable dependencies hoặc malware trong thư viện ngoài. Nó tạo results trong Security tab nhưng không tự động notify về dependencies mới hay malware. Phù hợp cho code scanning, không phải dependency management. -
✅ Configure Dependabot alerts.
Đúng vì: Như đã giải thích ở trên, đây là tính năng chính thức của GitHub để quét và notify owners về vulnerable dependencies mới + malware (qua integration với GitHub Advisory Database). Hoàn toàn khớp yêu cầu, tự động và dễ cấu hình. -
❌ Configure branch protection rules for each repository.
Sai vì: Branch protection rules dùng để bảo vệ branch khỏi push/merge không được phép (require PR reviews, status checks), không quét dependencies/malware và không gửi notify về rủi ro bảo mật. Nó chỉ kiểm soát quy trình CI/CD, không liên quan đến security scanning. -
❌ Subscribe all the repository owners to the GitHub Advisory Database.
Sai vì: GitHub Advisory Database là cơ sở dữ liệu công khai về vulnerabilities, subscribe chỉ cho phép nhận thông báo chung về advisories mới (không quét repo cụ thể). Không tự động kiểm tra dependencies/malware trong repo của họ, nên không đảm bảo notify chính xác cho từng repository.
🛡️ Lưu ý bổ sung: Kết hợp Dependabot alerts với Dependabot security updates để tự động tạo PR fix vulnerabilities (tính năng nâng cao 2026). Nếu dùng GitHub Enterprise, tích hợp với Azure DevOps qua GitHub Actions để pipeline mạnh hơn!
You are configuring a build pipeline in Azure Pipelines that will include a task named Task1. Task1 will authenticate by using an Azure AD service principal.
Which three values should you configure for Task1? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
- A the tenant ID
- B the subscription ID
- C the client secret
- D the app ID
- E the object ID
Xem giải thích
🧩 Phân tích chi tiết câu hỏi trắc nghiệm
📘 Nội dung câu hỏi:
Câu hỏi yêu cầu xác định ba giá trị cần cấu hình cho một task tên Task1 trong build pipeline của Azure Pipelines. Task1 này sẽ xác thực (authenticate) bằng cách sử dụng Azure AD service principal (ứng dụng dịch vụ chính thuộc Azure Active Directory).
- Bối cảnh: Bạn có một Azure subscription chứa Azure AD tenant. Azure Pipelines là dịch vụ CI/CD trong Azure DevOps, cho phép tạo pipeline để build, deploy ứng dụng.
- Yêu cầu cụ thể: Task1 cần xác thực với service principal để truy cập tài nguyên Azure một cách an toàn (không dùng tài khoản user). Service principal được tạo từ App Registration trong Azure AD, bao gồm các thông tin như ID ứng dụng, secret và tenant.
- Loại câu hỏi: Multiple correct answers (mỗi lựa chọn đúng đáng 1 điểm), chọn đúng ba giá trị cần thiết để cấu hình authentication.
- Phiên bản cập nhật: Dựa trên tài liệu Azure DevOps mới nhất (2024-2026), quy trình authentication service principal trong tasks (như Azure PowerShell, Azure CLI hoặc Azure RM task ở chế độ manual) tập trung vào thông tin Azure AD, không bắt buộc subscription ID nếu task chỉ cần quyền AD-level (không deploy trực tiếp vào subscription resources).
✅ Đáp án đúng (ba lựa chọn):
- the tenant ID
- the client secret
- the app ID
🛠️ Lý do chọn các đáp án đúng:
Những giá trị này là bộ ba thông tin cốt lõi để Azure Pipelines xác thực service principal với Azure AD:
- Tenant ID: Xác định Azure AD directory (tenant) mà service principal thuộc về, giúp hệ thống biết "xác thực vào tenant nào".
- Client secret: Khóa bí mật (password) của service principal, dùng để chứng minh quyền sở hữu ứng dụng.
- App ID (hay còn gọi Client ID): ID duy nhất của ứng dụng (App Registration) trong Azure AD, dùng làm định danh chính cho authentication.
Khi cấu hình trong task (ví dụ: Azure PowerShell task > Service principal authentication), bạn nhập trực tiếp ba giá trị này vào fields tương ứng để task có thể lấy token từ Azure AD. Không có chúng, task không thể authenticate.
📋 Giải thích tất cả các phương án (sử dụng emoji đánh dấu đúng/sai):
✅ the tenant ID
- Đúng ✅: Đây là Directory (Tenant) ID từ Azure AD tenant của bạn. Bắt buộc phải có để chỉ định tenant cụ thể, vì service principal chỉ hoạt động trong một tenant. Không có tenant ID, Azure Pipelines không biết gọi endpoint login nào (ví dụ:
https://login.microsoftonline.com/{tenant-id}).
❌ the subscription ID
- Sai ❌: Subscription ID dùng để chỉ định Azure subscription cụ thể khi deploy hoặc quản lý resources (như trong service connection). Tuy nhiên, cho Task1 authenticate bằng service principal, chỉ cần quyền AD-level (không cần subscription), nên không bắt buộc cấu hình ở đây. Subscription ID thường được chọn riêng trong task sau khi authenticate thành công.
✅ the client secret
- Đúng ✅: Đây là Service Principal Key hoặc Client Secret, được tạo từ App Registration. Nó đóng vai trò "mật khẩu" để lấy access token từ Azure AD. Phải cấu hình để xác thực không tương tác (non-interactive), theo chuẩn OAuth 2.0 Client Credentials flow.
✅ the app ID
- Đúng ✅: Còn gọi là Application (Client) ID hoặc Service Principal ID. Đây là định danh chính của service principal trong Azure AD, dùng trong mọi request authentication. Không có app ID, hệ thống không nhận diện được ứng dụng nào đang cố authenticate.
❌ the object ID
- Sai ❌: Object ID là ID của Service Principal Object trong Azure AD (khác với App ID). Nó dùng nội bộ để quản lý (như assign role), nhưng không dùng trực tiếp cho authentication. App ID mới là giá trị cần cho token request.
📚 Tài liệu tham khảo (cập nhật mới nhất 2024-2026):
- Microsoft Docs: Authenticate with service principal in Azure Pipelines tasks 🛠️ (chi tiết về fields tenant ID, app ID, client secret trong Azure PowerShell task).
- Azure DevOps Service Connections: Service principal auth 📘 (xác nhận quy trình manual auth không bắt buộc sub ID ở bước đầu).
- Azure AD App Registrations (hướng dẫn tạo app ID, client secret, tenant ID).
💡 Lưu ý bổ sung: Nếu task liên quan deploy resources, bạn có thể cần subscription ID sau authenticate. Thực hành trên Azure DevOps portal để test! 🚀
You plan to create a new package feed that will include the following views:
•@Local
•@Latest
•@Release
•@Prerelease
Which view should you create manually?
- A @Local
- B @Latest
- C @Release
- D @Prerelease
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi này thuộc lĩnh vực Azure Artifacts trong Azure DevOps, tập trung vào việc quản lý package feeds (cụ thể thường là npm feeds vì sử dụng ký hiệu @ cho views). Bạn đang quản lý feeds và dự định tạo một feed mới với 4 views cụ thể: @Local (hiển thị tất cả versions), @Latest (hiển thị phiên bản latest stable, loại trừ prerelease), @Release (hiển thị các phiên bản release stable), @Prerelease (hiển thị các phiên bản prerelease).
Câu hỏi yêu cầu xác định view nào bạn cần tạo thủ công (manually) khi thiết lập feed để có đầy đủ các view này. Đây là kiến thức cốt lõi về cách Azure Artifacts xử lý views: một số view tự động, số khác phải tạo qua UI (Feed settings > Views tab > + View) hoặc API. Kiến thức dựa trên phiên bản mới nhất Azure DevOps (2024-2026, không thay đổi cơ bản về views từ 2021).
📘 Tài liệu tham khảo:
✅ Đáp án đúng: @Latest
Lý do lựa chọn: Khi tạo feed mới, view @Local được tạo tự động ngay khi bạn push (publish) package đầu tiên. Tuy nhiên, @Latest là view đặc biệt phải tạo thủ công để hỗ trợ npm client sử dụng scope @myfeed:latest lấy phiên bản "latest" (phiên bản release cao nhất, loại trừ prerelease theo semver). Không tạo thủ công, npm sẽ không nhận diện view này. Đây là yêu cầu chuẩn để feed hỗ trợ tag "latest" phổ biến trong npm ecosystem. 🛠️
📋 Giải thích tất cả các phương án
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc, với lý do đúng/sai dựa trên cơ chế hoạt động của Azure Artifacts (phiên bản mới nhất):
-
@Local ❌ SAI
View này được tạo tự động ngay khi bạn publish package đầu tiên vào feed (quanpm publishhoặc API). Không cần can thiệp thủ công. Nếu chọn cái này, bạn hiểu sai cơ chế default view của Azure Artifacts. 🏷️ -
@Latest ✅ ĐÚNG
View này phải tạo thủ công qua tab Views trong settings feed (chọn + View, đặt tên@Latest, cấu hình filter latest stable version). Nó cần thiết để npm sử dụng tag "latest" (semver major.minor.patch cao nhất, ignore prerelease như 1.0.0-alpha). Đây là lựa chọn chính xác theo docs và practice exams (AZ-400). 🚀 -
@Release ❌ SAI
View này không bắt buộc tạo thủ công riêng vì có thể filter stable releases qua @Local hoặc semantic versioning tự nhiên (versions không có suffix -pre). Azure Artifacts ưu tiên @Local cho release info, không yêu cầu view riêng như @Latest. Chọn nó sẽ không chính xác trong ngữ cảnh câu hỏi. 🔄 -
@Prerelease ❌ SAI
Tương tự, view này được hỗ trợ gián tiếp qua tags khi publish với--tag prerelease(hiển thị trong @Local với filter version có suffix như -alpha/-beta). Không cần tạo thủ công riêng vì npm client fallback về @Local cho prerelease, khác với @Latest cần định nghĩa explicit. 📦
Lưu ý quan trọng 💡: Trong thực tế deploy/production, bạn thường chỉ cần @Local (auto) + @Latest (manual) cho hầu hết workflow npm. Các view khác tùy chọn và cấu hình filter tương tự (regex cho version). Nếu là feed Maven/NuGet, views khác (không dùng @), nhưng câu hỏi rõ npm-style. Test theo docs 2026 không thay đổi!