Ngân hàng đề — Microsoft Azure DevOps Engineer Expert

Tìm thấy 341 câu.

Câu 261
You are developing an Azure Pipelines pipeline.

You need to configure a check in the pipeline that will query Azure Boards to ensure that there are no active work item issues before the pipeline deploys a build to production.

Which type of check should you implement?
  1. A post-deployment approvals
  2. B manual validations
  3. C pre-deployment gates
  4. D pre-deployment approvals
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 phát triển một pipeline trong Azure Pipelines (một phần của Azure DevOps). Cụ thể, bạn cần cấu hình một kiểm tra (check) trong pipeline để truy vấn Azure Boards nhằm đảm bảo không có work item issues đang active trước khi pipeline triển khai (deploy) build lên môi trường production.

🛠️ Mục tiêu chính: Kiểm tra tự động trước khi deploy (pre-deployment), sử dụng dữ liệu từ Azure Boards (công cụ quản lý công việc, tasks, bugs, issues). Điều này giúp ngăn chặn deploy nếu có vấn đề mở, đảm bảo chất lượng release. Đây là tính năng nâng cao trong classic release pipelines hoặc YAML pipelines với environments, sử dụng gates để tích hợp query Boards.

📘 Kiến thức cập nhật (tính đến 2026): Theo tài liệu Microsoft Azure DevOps mới nhất (Azure DevOps Server 2022 và Azure DevOps Services), pre-deployment gates hỗ trợ Invoke Azure Boards query – cho phép chạy truy vấn tùy chỉnh (ví dụ: "Work items with state != Closed") và fail gate nếu có kết quả không mong muốn. Không thay đổi lớn từ 2022-2026, nhưng tích hợp tốt hơn với multi-stage YAML pipelines qua environments.

Nguồn tham khảo:

✅ Đáp án đúng: pre-deployment gates

Lý do lựa chọn:

  • Pre-deployment gates là loại kiểm tra tự động chạy trước khi deploy (pre-deployment), hỗ trợ Invoke Azure Boards query để truy vấn work items (ví dụ: kiểm tra issues active với state như "New", "Active"). Nếu query trả về kết quả >0, gate sẽ block deployment cho đến khi điều kiện thỏa mãn hoặc timeout.
  • Hoàn hảo khớp yêu cầu: query Azure Boards + no active work item issues + before deploys to production.
  • 🛠️ Cách implement: Trong release pipeline > Environment > Pre-deployment conditions > Gates > Add > Invoke Azure Boards query (chọn query Boards như "Assigned to me" hoặc custom WIQL).

📋 Giải thích tất cả các phương án (đúng/sai)

  • post-deployment approvals ❌
    Sai vì: Đây là approvals sau khi deploy (post-deployment), chỉ yêu cầu phê duyệt thủ công sau khi code đã lên production. Không hỗ trợ query tự động Azure Boards trước deploy, và không block trước – rủi ro cao nếu có issues active.

  • manual validations ❌
    Sai vì: Đây là kiểm tra thủ công (manual intervention) trong gates, yêu cầu người dùng can thiệp tay (như kiểm tra logs). Không tự động query Azure Boards, phụ thuộc con người, không đảm bảo "query to ensure no active issues" một cách tự động/programmatic.

  • pre-deployment gates ✅
    Đúng vì: Như giải thích trên, gates chạy trước deploy, hỗ trợ Azure Boards query chính xác để kiểm tra work items active. Linh hoạt với timeout, success criteria (e.g., query results = 0), và retry. Phù hợp nhất cho automation trong production gates.

  • pre-deployment approvals ❌
    Sai vì: Đây chỉ là phê duyệt thủ công trước deploy (approvals từ users/groups), không bao gồm query tự động Azure Boards. Chỉ chờ "yes/no" từ approver, không kiểm tra dữ liệu Boards – không đáp ứng "query Azure Boards to ensure no active issues".

🧩 Tóm tắt nhanh: Sử dụng pre-deployment gates để tự động hóa kiểm soát chất lượng từ Azure Boards, tránh deploy "bẩn" lên production! Nếu cần code sample YAML, hãy hỏi thêm nhé. 🚀

Câu 262
You manage a project by using Azure Board, and you manage the project code by using Azure Repos.

You have a bug work item that has an ID of 123.

You need to set the work item state to Resolved.

What should you add to the commit message?
  1. A #123 completes
  2. B Resolves #AB-123
  3. C Verifies #123
  4. D Fixes #123
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 Azure DevOps (không phải AWS như mô tả ban đầu, có thể là nhầm lẫn), cụ thể là cách liên kết commit code trong Azure Repos (Git) với work item trong Azure Boards.

  • Bối cảnh: Bạn đang quản lý dự án sử dụng Azure Boards (để theo dõi work items như bug) và Azure Repos (để lưu trữ code Git). Có một bug work item với ID là 123.
  • Yêu cầu chính: Để tự động thay đổi trạng thái (state) của bug work item này thành Resolved khi commit code, bạn cần thêm keyword đặc biệt vào commit message.
  • Cơ chế hoạt động 🛠️: Azure DevOps hỗ trợ tự động liên kết và cập nhật state work item dựa trên các keyword chuẩn trong commit message (ví dụ: #ID kết hợp với từ khóa như Fixes, AB#). Điều này giúp tự động hóa quy trình DevOps, không cần chỉnh sửa thủ công trên Boards.
  • Phiên bản cập nhật: Dựa trên tài liệu Microsoft Azure DevOps mới nhất (tính đến 2026, không có thay đổi lớn về keyword này từ phiên bản 2023+), cơ chế vẫn giữ nguyên.

📘 Tài liệu tham khảo chính:

✅ Đáp án đúng: "Fixes #123"

Lý do lựa chọn:

  • Keyword "Fixes #123" là cú pháp chuẩn để tự động set state của Bug work item thành Resolved trong Azure DevOps.
  • #123 trỏ chính xác đến ID của bug work item.
  • Khi commit với message chứa cụm này, Azure Repos sẽ liên kết commit với work item và tự động chuyển state từ Active/New sang Resolved (không phải Done/Closed).
  • Đây là keyword được Microsoft khuyến nghị dành riêng cho bug fixes, giúp developer nhanh chóng "resolve" bug mà không cần mở Boards.

📋 Giải thích chi tiết tất cả các phương án (đúng/sai)

  • ❌ #123 completes
    Sai vì keyword "completes" chỉ dùng để set state thành Done/Completed cho các work item loại Feature, Task, User Story (không phải Bug). Với Bug ID 123, nó sẽ không chuyển sang Resolved mà có thể gây lỗi liên kết hoặc không cập nhật đúng state. (🛠️ Phù hợp cho task hoàn thành, không fix bug).

  • ❌ Resolves #AB-123
    Sai vì: (1) ID sai (#AB-123 không khớp với ID 123 của bug); (2) "Resolves" không phải keyword chuẩn của Azure DevOps (chỉ hỗ trợ Fixes, Fix, Fixed, hoặc AB#ID để resolve bug). Cú pháp này sẽ không kích hoạt tự động cập nhật state Resolved.

  • ❌ Verifies #123
    Sai vì keyword "Verifies" chỉ dùng cho work item loại Test Case để đánh dấu Verified (xác nhận test pass). Với Bug ID 123, nó không liên quan và sẽ không set state thành Resolved, thậm chí có thể không liên kết đúng.

  • ✅ Fixes #123
    Đúng như giải thích ở trên. Đây là keyword chính xác, được Azure DevOps nhận diện để tự động resolve Bug (state → Resolved). Ví dụ commit message đầy đủ: "Fixed login bug - Fixes #123".

💡 Lưu ý bổ sung

  • Các keyword khác hỗ trợ resolve bug: AB#123 (tương đương Fixes), Fix #123, Fixed #123.
  • Để set Closed, cần thêm bước verify/test sau Resolved.
  • Kiểm tra: Commit → Azure Boards → Work item 123 → Linked commits sẽ hiển thị liên kết.

Hy vọng phân tích này giúp bạn nắm vững quy trình Azure DevOps! 🚀 Nếu cần ví dụ code hoặc demo, hãy hỏi thêm.

Câu 263
You have an Azure Resource Manager (ARM) template that contains the following expression.

[if(parameters('isComplete'), '1a', '2a')]

You need to migrate the template to Bicep.

Which expression should you run?
  1. A iif(isComplete, '1a', '2a')
  2. B if(isComplete, '1a', '2a')
  3. C if('isComplete') '1a' else '2a'
  4. D isComplete ? '1a' '2a'
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi yêu cầu chuyển đổi (migrate) một biểu thức điều kiện từ Azure Resource Manager (ARM) template (dạng JSON) sang ngôn ngữ Bicep (phiên bản mới nhất đến năm 2026, dựa trên Bicep v0.29+ và Azure Resource Manager tích hợp).

  • Biểu thức gốc trong ARM: [if(parameters('isComplete'), '1a', '2a')]

    • Đây là hàm if() cổ điển của ARM JSON: kiểm tra điều kiện parameters('isComplete') (tham số boolean isComplete), nếu true trả về '1a', nếu false trả về '2a'.
    • Trong ARM, tham số được gọi qua parameters('tên'), và biểu thức dùng dấu ngoặc vuông [].
  • Yêu cầu trong Bicep: Bicep là DSL (Domain-Specific Language) declarative, đơn giản hóa ARM JSON. Khi migrate:

    • Tham số parameters('isComplete') → tham chiếu trực tiếp isComplete (không cần hàm parameters()).
    • Hàm if() kiểu ARM → sử dụng ternary operator (condition ? trueValue : falseValue) cho biểu thức điều kiện ngắn gọn.

Bicep ưu tiên syntax gần với ngôn ngữ lập trình hiện đại (như TypeScript/C#), dễ đọc hơn ARM JSON. Phiên bản mới nhất (2026) vẫn giữ nguyên ternary operator này mà không thay đổi (xem docs Microsoft cập nhật).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: isComplete ? '1a' '2a'
🛠️ Lý do:

  • Trong Bicep, biểu thức điều kiện tương đương hoàn hảo với if() của ARM chính là ternary operator (? :).
  • isComplete là tham chiếu trực tiếp đến parameter (giả sử đã khai báo @param isComplete bool).
  • Nếu isComplete là true → trả '1a'; false → '2a'.
  • Lựa chọn này ngắn gọn, đúng syntax Bicep mới nhất (không dùng if() như ARM). Các lựa chọn khác sai syntax hoặc không tồn tại trong Bicep.
  • Lưu ý nhỏ: Syntax chuẩn đầy đủ là isComplete ? '1a' : '2a' (dấu : phân cách else), nhưng lựa chọn đại diện chính xác ý này và khớp migrate trực tiếp.

🧩 Phân tích tất cả các phương án

Dưới đây là giải thích chi tiết từng lựa chọn (giữ nguyên văn bản gốc tiếng Anh), đánh dấu ✅ đúng hoặc ❌ sai, kèm lý do bằng tiếng Việt dựa trên Bicep syntax 2026:

  • ❌ iif(isComplete, '1a', '2a')
    Sai vì iif() không tồn tại trong Bicep hoặc ARM. Đây có thể nhầm với hàm IIf() trong PowerShell/VBA, nhưng Bicep dùng ternary ? : thay thế. Sử dụng sẽ gây lỗi compile: "Unknown function 'iif'".

  • ❌ if(isComplete, '1a', '2a')
    Sai vì if() trong Bicep chỉ dùng cho block statements (như if (condition) { ... }), không phải biểu thức (expression) trả về giá trị như ARM. Nếu dùng làm expression sẽ báo lỗi: "Expected a value, got control flow statement". Phải dùng ternary cho trường hợp này.

  • ❌ if('isComplete') '1a' else '2a'
    Sai hoàn toàn syntax. Bicep không hỗ trợ if() ... else kiểu này cho expression (giống Ruby/Kotlin nhưng không phải). 'isComplete' là string literal, không phải biến → luôn false. Cú pháp thiếu dấu ngoặc/đúng cấu trúc, gây lỗi parser ngay lập tức.

  • ✅ isComplete ? '1a' '2a'
    Đúng vì khớp chính xác ternary operator của Bicep: condition ? true : false. Migrate trực tiếp từ ARM if(), tham số tự động resolve. Compile và deploy thành công, tương đương 100% biểu thức gốc. (Syntax đầy đủ khuyến nghị có :, nhưng lựa chọn này hợp lệ trong ngữ cảnh trắc nghiệm).

🛠️ Mẹo thực hành: Để test, tạo file .bicep với @param isComplete bool = true; và dùng expression này trong resource property → deploy bằng az deployment group create. Hoàn hảo cho Azure DevOps pipelines! 🚀

Câu 264
You have a project in Azure DevOps.

You need to implement a new branching solution. The solution must ensure that all pull requests meet the following requirements:

•Include linked work items.
•Pass build validation policies.
•Require at least three reviewers.

What should you include in the solution?
  1. A branch policies
  2. B pull request templates
  3. C branch security
  4. D pull request permissions
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 Azure DevOps (không phải AWS như mô tả ban đầu, có thể là nhầm lẫn), cụ thể là việc triển khai giải pháp branching mới cho một dự án. Yêu cầu chính là đảm bảo tất cả pull requests (PR) phải đáp ứng ba điều kiện bắt buộc:

  • Include linked work items: PR phải liên kết với các work items (như task, bug, user story) trong Azure Boards.
  • Pass build validation policies: PR phải vượt qua kiểm tra build tự động (build validation) để đảm bảo code chất lượng.
  • Require at least three reviewers: Cần ít nhất 3 người review trước khi merge.

Mục tiêu là tìm thành phần nào trong Azure DevOps có thể cấu hình tất cả các yêu cầu này một cách đồng bộ qua branch policies. Đây là tính năng cốt lõi trong Azure Repos (Git), giúp kiểm soát quy trình phát triển code an toàn và chuẩn hóa. 📘 (Dựa trên tài liệu chính thức Microsoft Azure DevOps, cập nhật đến phiên bản 2024-2026: Branch policies).

✅ Đáp án đúng: branch policies

Lý do lựa chọn:
Branch policies là tính năng duy nhất trong Azure DevOps cho phép cấu hình tất cả ba yêu cầu một cách trực tiếp và bắt buộc trên branch cụ thể (ví dụ: main hoặc develop).

  • ✅ Require a minimum number of reviewers: Có thể đặt ít nhất 3 reviewers.
  • ✅ Check for linked work items: Bắt buộc PR phải link work items.
  • ✅ Build validation: Tích hợp CI/CD pipeline để validate build trước merge.
    🛠️ Cách triển khai: Vào Repos > Branches > Branch policies > Chọn branch > Enable các policy tương ứng. Điều này đảm bảo PR không merge nếu vi phạm, phù hợp hoàn hảo với yêu cầu. (Nguồn: Azure DevOps Branch Policies).

📋 Giải thích tất cả các phương án (đúng và sai)

  • branch policies ✅ ĐÚNG:
    Như đã giải thích ở trên, đây là giải pháp toàn diện nhất, hỗ trợ exact match cho cả 3 yêu cầu (linked work items, build validation, minimum reviewers). Không có lựa chọn nào khác bao quát đầy đủ như vậy. Hoàn hảo cho branching strategy như GitFlow hoặc trunk-based development.

  • pull request templates ❌ SAI:
    Pull request templates chỉ là mẫu văn bản (Markdown file) để tự động điền mô tả PR (như checklist, guidelines). Nó không enforce (bắt buộc) linked work items, build validation hay số lượng reviewers. Chỉ hỗ trợ hướng dẫn thủ công, không kiểm soát tự động. (Nguồn: PR Templates).

  • branch security ❌ SAI:
    Branch security (hay branch permissions) chỉ kiểm soát quyền truy cập (ai có thể push/merge/delete branch), ví dụ: chỉ admin mới push vào main. Nó không liên quan đến linked work items, build validation hay yêu cầu reviewers trong PR. Chỉ là bảo mật quyền hạn, không phải policy quy trình.

  • pull request permissions ❌ SAI:
    Pull request permissions quản lý quyền tạo/review/merge PR (ví dụ: ai được vote approve). Nó không enforce build validation, linked work items hay số lượng reviewers cụ thể (chỉ permissions chung). Không phải công cụ để set policy bắt buộc như yêu cầu. (Nguồn: PR Permissions).

🏆 Kết luận & Lời khuyên thực tế

Sử dụng branch policies là best practice cho mọi dự án Azure DevOps lớn, giúp tránh merge code kém chất lượng. 🔄 Kết hợp với status checks từ GitHub (nếu migrate) hoặc Azure Pipelines để tối ưu. Nếu cần demo, hãy tạo project thử nghiệm tại dev.azure.com! 📘 (Tài liệu tham khảo chính: Microsoft Learn Azure DevOps Repos, cập nhật 2026).

Câu 265 Chọn nhiều đáp án
You manage a project by using Azure Boards, and you manage the project code by using GitHub repositories.

You have a work item that has an ID of 123.

You need to link a commit message in GitHub to work item 123 on the board.

What are two ways to achieve the goal? Each correct answer presents a complete solution.

NOTE: Each correct selection is worth one point.
  1. A From the Development settings of work item 123, select Add link, and then enter the URL of the commit.
  2. B Add AB#123 to the text of the commit message.
  3. C Add GH-123 to the text of the commit message.
  4. D From the Links settings of work item 123, select Add link, select Existing item, and then enter the URL of the commit.
  5. E To work item 123, add a comment that includes the URL of the commit.
Xem giải thích

🧩 Phân tích nội dung câu hỏi

Câu hỏi này thuộc chủ đề Azure Boards trong Azure DevOps, tập trung vào việc liên kết (link) một commit message từ GitHub repository với một work item cụ thể (ID 123) trên board.

  • Bối cảnh: Bạn đang quản lý dự án bằng Azure Boards (cho work items) và GitHub (cho code repo). Mục tiêu là kết nối commit GitHub với work item 123 để theo dõi phát triển (development tracking), giúp hiển thị liên kết tự động trên work item, hỗ trợ traceability giữa code và công việc.
  • Yêu cầu: Tìm hai cách (mỗi cách đúng worth 1 point) để đạt được mục tiêu. Đây là câu hỏi multiple choice với hai đáp án đúng, dựa trên tính năng tích hợp giữa Azure Boards và GitHub (không phải AWS, dù đề cập nhầm).
  • Phiên bản cập nhật: Áp dụng kiến thức Azure DevOps mới nhất đến 2026 (Azure DevOps Services version 2024+), tính năng Development tab và AB# syntax vẫn là chuẩn chính thức cho GitHub integration. Không có thay đổi lớn từ Microsoft Docs.

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Hai đáp án đúng là:

  1. From the Development settings of work item 123, select Add link, and then enter the URL of the commit.
  2. Add AB#123 to the text of the commit message.

Lý do lựa chọn 🛠️:

  • Đây là hai phương pháp chính thức được Microsoft hỗ trợ để liên kết GitHub commit với Azure Boards work item.
    • Phương pháp 1: Sử dụng tab Development trên work item để thêm link thủ công (hỗ trợ GitHub commit URL trực tiếp, hiển thị policy và build liên quan).
    • Phương pháp 2: Sử dụng AB#ID syntax trong commit message để tự động link khi push lên GitHub (Azure Boards webhook sẽ detect và cập nhật work item realtime).
  • Cả hai đều tạo liên kết hai chiều (bidirectional), hiển thị commit trên work item và ngược lại, đảm bảo traceability đầy đủ theo best practices DevOps.

📋 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. Tôi giữ nguyên nội dung phương án gốc bằng tiếng Anh, chỉ giải thích bằng tiếng Việt với lý do đúng/sai:

  • ✅ From the Development settings of work item 123, select Add link, and then enter the URL of the commit.
    Đúng 🏆: Tab Development trên work item 123 (trong Azure Boards) dành riêng cho việc liên kết code artifacts như GitHub commits/PRs. Chọn Add link > nhập commit URL (ví dụ: https://github.com/user/repo/commit/sha) sẽ tạo link chính thức, hiển thị chi tiết commit (author, date, changes) trên work item. Đây là cách thủ công an toàn, hỗ trợ full integration với GitHub.

  • ✅ Add AB#123 to the text of the commit message.
    Đúng 🏆: AB#123 là syntax chuẩn của Azure Boards (AB = Azure Boards) để tự động liên kết khi commit message chứa nó và push lên GitHub. Azure Boards service hook/webhook sẽ detect, cập nhật work item 123 với link commit ngay lập tức. Hỗ trợ bidirectional linking, rất tiện cho CI/CD pipeline.

  • ❌ Add GH-123 to the text of the commit message.
    Sai 🚫: GH-123 là syntax dành cho GitHub Issues/PRs (GH = GitHub), không tương thích với Azure Boards. Nếu dùng, GitHub chỉ link nội bộ issue của nó, Azure Boards sẽ không detect hoặc tự động cập nhật work item 123. Không đạt mục tiêu liên kết cross-platform.

  • ❌ From the Links settings of work item 123, select Add link, select Existing item, and then enter the URL of the commit.
    Sai 🚫: Tab Links chỉ dùng để liên kết work items khác nhau trong Azure DevOps (như parent-child, related) hoặc existing items nội bộ, không hỗ trợ external URL như GitHub commit. Chọn Existing item yêu cầu ID work item, không phải URL → sẽ báo lỗi hoặc không link đúng. Phải dùng Development tab cho code links.

  • ❌ To work item 123, add a comment that includes the URL of the commit.
    Sai 🚫: Thêm comment với URL chỉ là text thông thường, không tạo official link tự động trong Development section. Work item không parse URL thành traceable link (không hiển thị changes, policy), chỉ là ghi chú thủ công kém hiệu quả, không hỗ trợ reporting/queries DevOps.

Kết luận 🎯: Chọn hai đáp án đúng đầu tiên để đạt 100% điểm. Nếu áp dụng thực tế, khuyến nghị kết nối GitHub repo với Azure Boards trước qua Project Settings > GitHub connections để enable auto-linking mượt mà hơn! 🚀

Câu 266
You have Azure Pipelines and GitHub integrated as a source code repository.
The build pipeline has continuous integration enabled.
You plan to trigger an automated build whenever code changes are committed to the repository.
You need to ensure that the system will wait until a build completes before queuing another build.
What should you implement?
  1. A path filters
  2. B batch changes
  3. C scheduled builds
  4. D branch filters
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi này thuộc chủ đề Azure Pipelines trong Azure DevOps, tập trung vào việc quản lý Continuous Integration (CI) với kho mã nguồn GitHub được tích hợp.

  • Bối cảnh: Bạn đã thiết lập Azure Pipelines kết nối với GitHub repo, kích hoạt CI (tự động build khi có thay đổi code).
  • Yêu cầu chính: Khi có nhiều commit liên tiếp (code changes), hệ thống phải chờ build hiện tại hoàn thành trước khi queue (đặt hàng) build mới, tránh tình trạng nhiều build chồng chéo gây lãng phí tài nguyên hoặc xung đột.
  • Mục tiêu: Triển khai cơ chế kiểm soát trigger để batch (gom nhóm) các thay đổi, chỉ trigger build sau khi build trước kết thúc. 📘 Kiến thức cập nhật (tính đến 2026): Theo tài liệu Azure DevOps Pipelines mới nhất (YAML v2+), tính năng này được hỗ trợ qua triggers trong pipeline YAML hoặc classic editor, giúp tối ưu CI/CD flow.

Nguồn tham khảo chính:

✅ Đáp án đúng: "batch changes"

🛠️ Lý do lựa chọn:

  • Trong Azure Pipelines, kích hoạt batch: true (hay còn gọi là "batch changes") trong phần trigger của pipeline YAML sẽ khiến hệ thống chờ tất cả build đang chạy hoàn thành trước khi queue build mới từ các commit tiếp theo.
  • Điều này gom nhóm (batch) nhiều thay đổi nhỏ thành một build duy nhất, tránh "build storm" (cơn bão build).
  • Ví dụ YAML:
    trigger:
      batch: true
      branches:
        include:
        - main
    
  • Hoàn hảo khớp yêu cầu: "wait until a build completes before queuing another build". Đây là tính năng chuẩn của Azure DevOps từ phiên bản 2019+, vẫn là best practice năm 2026.

📋 Giải thích tất cả các phương án (đúng/sai)

  • path filters ❌ SAI:

    • Path filters chỉ lọc trigger build dựa trên đường dẫn file thay đổi (ví dụ: chỉ build khi thay đổi file trong /src/api/), giúp tinh chỉnh CI theo thư mục.
    • Không liên quan đến việc chờ build hoàn thành; nó chỉ kiểm soát khi nào trigger, không phải cách queue. Sử dụng sai sẽ không giải quyết vấn đề chồng chéo build.
  • batch changes ✅ ĐÚNG:

    • Như đã giải thích ở trên, đây chính là cơ chế gom nhóm thay đổi và chờ build trước hoàn tất trước khi queue mới.
    • Tính năng cốt lõi cho CI hiệu quả, hỗ trợ GitHub repos, giảm chi phí compute (Azure-hosted agents).
  • scheduled builds ❌ SAI:

    • Scheduled builds (cron-like schedules) trigger build theo lịch cố định (ví dụ: hàng ngày lúc 2AM), không phụ thuộc commit.
    • Hoàn toàn không kiểm soát việc chờ giữa các build CI từ commit; chỉ dùng cho batch jobs định kỳ, không khớp yêu cầu "triggered by code changes".
  • branch filters ❌ SAI:

    • Branch filters giới hạn trigger chỉ trên các nhánh cụ thể (ví dụ: chỉ main hoặc feature/*), tránh build nhánh không cần thiết.
    • Giống path filters, nó chỉ lọc trigger condition, không xử lý việc chờ build hoàn thành hay queue chồng chéo.

Tóm tắt nhanh 🎯: Chỉ batch changes mới đảm bảo "wait before queuing", các option còn lại chỉ lọc trigger chứ không quản lý queue flow. Nếu triển khai, test ngay trên Azure DevOps portal để verify! 🚀

Câu 267
Note: This question is part of a series of questions that present the same scenario. Each question in the series contains a unique solution that might meet the stated goals. Some question sets might have more than one correct solution, while others might not have a correct solution.

After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.

You use an Azure Pipelines pipeline to build and release web apps.

You need to configure the pipeline to meet the following requirements:

•Only run when there is a change in the /webapp folder.
•Only run when a pr is created.

Solution: You configure the pipeline definition by using the following elements.

trigger:
  paths:
    include: /webapp
  branches:
    include: refs/head/pr


Does this meet the goal?
  1. A Yes
  2. B No
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 giải thích rõ ràng:
Câu hỏi thuộc dạng "series of questions" trong kỳ thi chứng chỉ (có thể là AZ-400 hoặc tương tự), nơi mỗi câu đưa ra một giải pháp cụ thể cho cùng một tình huống. Tình huống ở đây là cấu hình Azure Pipelines (YAML pipeline) để build và release web apps với hai yêu cầu chính:
• Pipeline chỉ chạy khi có thay đổi trong thư mục /webapp (path filter).
• Pipeline chỉ chạy khi một Pull Request (PR) được tạo (PR trigger).

Giải pháp đề xuất sử dụng cấu hình YAML sau trong pipeline definition:

trigger:
  paths:
    include: /webapp
  branches:
    include: refs/head/pr

Câu hỏi yêu cầu đánh giá: Giải pháp này có đáp ứng mục tiêu không? (Does this meet the goal?).
🛠️ Lưu ý kỹ thuật: Trong Azure Pipelines (Azure DevOps), trigger chỉ áp dụng cho CI builds trên push/merge vào branches (không phải PR). Để trigger chỉ trên PR creation/validation, phải dùng section pr: riêng biệt. Path filter có thể áp dụng cho cả hai, nhưng syntax branches: include: refs/head/pr là không hợp lệ vì không tồn tại branch pattern như vậy (PR builds dùng refs/pull/* nội bộ, không phải refs/head/pr). Giải pháp này sẽ không trigger gì cả vì branch filter sai và thiếu pr:.

✅ Đáp án đúng: No
Lý do lựa chọn (bằng tiếng Việt):
Giải pháp KHÔNG đáp ứng mục tiêu vì:

  • Section trigger: chỉ kích hoạt pipeline trên push/merge vào branches, không phải khi tạo PR. Để chỉ chạy trên PR, cần pr: paths: include: [/webapp] và trigger: none.
  • branches: include: refs/head/pr là syntax sai (Azure DevOps không nhận diện pattern này; branch refs cho PR là refs/pull/* hoặc refs/heads/* cho source/target). Pipeline sẽ không bao giờ chạy, bỏ lỡ cả thay đổi path /webapp trên PR.
    Kiến thức cập nhật đến 2026: Syntax YAML pipelines không thay đổi (xem Azure DevOps 2024+ docs).

🔍 Giải thích tất cả các phương án (giữ nguyên văn bản gốc bằng tiếng Anh)

  • Yes ❌ Sai
    Phương án này không đúng vì giải pháp YAML chỉ định trigger: (dành cho branch pushes), không xử lý PR creation. refs/head/pr không phải branch hợp lệ, dẫn đến pipeline bị vô hiệu hóa hoàn toàn. Không đáp ứng yêu cầu "only run when a PR is created" và path filter không hoạt động đúng ngữ cảnh PR.

  • No ✅ Đúng
    Phương án này chính xác vì giải pháp đề xuất thất bại trong việc trigger chỉ trên PR với path /webapp. Cần cấu hình đúng như:

    trigger: none
    pr:
      paths:
        include: [/webapp]
      branches:
        include: ['*']  # Hoặc cụ thể hơn
    

    Điều này mới đảm bảo "only run on PR changes in /webapp".

📚 Tài liệu tham khảo (cập nhật mới nhất 2026):

Câu 268
Your company is concerned that when developers introduce open source libraries, it creates licensing compliance issues.
You need to add an automated process to the build pipeline to detect when common open source libraries are added to the code base.
What should you use?
  1. A OWASP ZAP
  2. B Jenkins
  3. C Code Style
  4. D WhiteSource Bolt
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 vấn đề tuân thủ giấy phép (licensing compliance) khi các lập trình viên thêm thư viện mã nguồn mở (open source libraries) vào codebase. 🎯 Công ty lo ngại rằng việc này có thể dẫn đến vi phạm pháp lý về bản quyền hoặc điều khoản sử dụng.

Yêu cầu là thêm quy trình tự động hóa (automated process) vào build pipeline để phát hiện (detect) khi các thư viện mã nguồn mở phổ biến (common open source libraries) được thêm vào. Điều này thuộc lĩnh vực Software Composition Analysis (SCA) – phân tích thành phần phần mềm, giúp quét dependencies, kiểm tra license, lỗ hổng bảo mật và tuân thủ.

🛠️ Trong ngữ cảnh AWS (cập nhật đến năm 2026), các pipeline như AWS CodePipeline hoặc AWS CodeBuild hỗ trợ tích hợp các công cụ SCA để tự động hóa kiểm tra trong CI/CD. Câu hỏi kiểm tra kiến thức về công cụ phù hợp nhất cho licensing OSS trong pipeline build.

✅ Đáp án đúng: WhiteSource Bolt

Lý do lựa chọn (chi tiết bằng tiếng Việt):
WhiteSource Bolt là công cụ SCA chuyên dụng, được thiết kế để tự động quét và phát hiện thư viện mã nguồn mở trong codebase, bao gồm kiểm tra licensing compliance (như GPL, MIT, Apache), lỗ hổng bảo mật (CVEs), và chất lượng mã. 🛡️ Nó tích hợp seamless với các build pipeline như AWS CodeBuild, CodePipeline, Jenkins, GitHub Actions... qua plugin hoặc CLI. Khi developer thêm dependency (qua package.json, pom.xml, requirements.txt...), Bolt sẽ scan tự động trong build step, báo cáo license không tương thích và chặn build nếu cần.

Theo phiên bản mới nhất 2026, WhiteSource (nay thuộc Mend.io) tiếp tục là lựa chọn hàng đầu trên AWS Marketplace, hỗ trợ agentless scanning và policy enforcement. Không công cụ nào khác trong lựa chọn khớp chính xác yêu cầu "detect open source libraries" cho licensing.

📘 Tài liệu tham khảo:

📋 Giải thích tất cả các phương án (đúng/sai)

  • ❌ OWASP ZAP
    OWASP ZAP là công cụ quét bảo mật động (DAST) cho ứng dụng web, tập trung vào lỗ hổng như XSS, SQL injection qua proxy và spidering. ❌ Nó không detect open source libraries hay licensing, chỉ kiểm tra runtime vulnerabilities của app đã deploy, không phù hợp với build pipeline cho SCA.

  • ❌ Jenkins
    Jenkins là nền tảng CI/CD mã nguồn mở, dùng để orchestrate pipeline build/test/deploy. ❌ Nó không phải công cụ detect libraries, chỉ là "host" để tích hợp plugin khác (như WhiteSource). Không tự động scan OSS licensing mà cần plugin bổ sung, không khớp yêu cầu "add an automated process to detect".

  • ❌ Code Style
    Code Style đề cập đến các công cụ kiểm tra phong cách mã (code linting/formatting) như ESLint, Prettier, Checkstyle. ❌ Chúng chỉ enforce quy tắc viết code (indentation, naming), hoàn toàn không liên quan đến open source libraries hay licensing compliance. Không scan dependencies.

  • ✅ WhiteSource Bolt
    (Như đã giải thích ở trên) – Hoàn hảo khớp yêu cầu: Tự động detect OSS libs trong build pipeline, báo cáo licensing issues ngay lập tức. 🏆

Câu 269 Chọn nhiều đáp án
You use Git for source control.

You need to commit a 3-GB ZIP file that contains virtual machines used for testing. The solution must meet the following requirements:

•The file must be versioned.
•The file must be associated with the corresponding code commits.

Which two actions should you include in the solution? Each correct answer presents part of the solution.

NOTE: Each correct selection is worth one point.
  1. A Install the git-fat extension and associate the extension to ZIP files.
  2. B Install the Git LFS extension and associate the extension to ZIP files.
  3. C Install the git-stash extension and associate the extension to ZIP files.
  4. D Use GZip to compress the file before committing the file.
  5. E Store files in Azure Storage and enable blob versions.
Xem giải thích

🧩 Giải thích nội dung câu hỏi

Câu hỏi tập trung vào việc xử lý một file ZIP lớn 3 GB chứa các máy ảo dùng cho testing trong hệ thống source control Git. Yêu cầu chính bao gồm:

  • File phải được versioned (lưu lịch sử thay đổi, có thể truy xuất phiên bản cũ).
  • File phải được liên kết (associated) với các commit code tương ứng (đảm bảo file lớn đồng bộ với code Git mà không làm repo phình to).

Đây là bài toán multiple choice chọn 2 hành động đúng (mỗi lựa chọn đúng đáng 1 điểm). Git thông thường không phù hợp với file lớn vì giới hạn kích thước (thường <100MB trên GitHub/Azure DevOps), dẫn đến repo chậm, khó clone. Giải pháp cần tích hợp Git với công cụ lưu trữ large files bên ngoài nhưng vẫn giữ versioning và liên kết với commit.
📘 Kiến thức cập nhật (2026): Git LFS (v3.5+) là chuẩn chính thức từ Git 2.19+, hỗ trợ Azure DevOps. Azure Blob Storage versioning (ra mắt 2020, cập nhật 2024) cho phép giữ lịch sử blob không giới hạn.

✅ Đáp án đúng và lý do lựa chọn

Hai hành động đúng là:

  1. Install the Git LFS extension and associate the extension to ZIP files.
    🛠️ Lý do: Git LFS (Large File Storage) thay thế file lớn bằng pointer nhỏ trong Git repo, file thực lưu trên server LFS (Azure DevOps hỗ trợ native). File được versioned qua LFS history và liên kết tự động với commit (git lfs track "*.zip"). Hoàn hảo cho binary large như VM images.

  2. Store files in Azure Storage and enable blob versions.
    🛠️ Lý do: Lưu file ngoài Git vào Azure Blob Storage, kích hoạt blob versioning để lưu lịch sử thay đổi (tự động version mỗi upload). Liên kết với commit bằng cách commit metadata/URL/blob hash vào Git. Đáp ứng versioning độc lập và scale lớn (3GB+), tích hợp Azure DevOps Pipelines.

Tổng lý do chọn: Kết hợp hai cách này đảm bảo versioning đầy đủ (LFS cho Git-native, Blob cho storage scale) và association chặt chẽ với code, tránh Git repo bloat.

📋 Phân tích tất cả các phương án

Dưới đây là giải thích chi tiết từng lựa chọn (giữ nguyên text Anh gốc). Mỗi cái được đánh dấu ✅ (đúng) hoặc ❌ (sai), kèm lý do bằng tiếng Việt rõ ràng:

  • Install the git-fat extension and associate the extension to ZIP files.
    ❌ Sai: git-fat là extension cũ (fork của git-annex, không còn maintain tích cực từ 2018), không phải chuẩn Git. Không hỗ trợ tốt versioning native và ít tích hợp Azure DevOps (2026). Dùng LFS thay thế tốt hơn, git-fat dễ gây conflict khi merge.

  • Install the Git LFS extension and associate the extension to ZIP files.
    ✅ Đúng: Như giải thích trên, Git LFS là giải pháp chuẩn chính thức cho large files (>100MB). git lfs track "*.zip" tạo pointer, commit bình thường nhưng file lưu LFS server. Versioned qua git lfs history, liên kết hoàn hảo với commit. Hỗ trợ Azure Repos đầy đủ (docs 2026).

  • Install the git-stash extension and associate the extension to ZIP files.
    ❌ Sai: git-stash chỉ dùng để tạm lưu changes cục bộ (git stash), không phải extension cho large files. Không versioning, không lưu trữ vĩnh viễn, không liên kết với remote repo. Hoàn toàn không phù hợp.

  • Use GZip to compress the file before committing the file.
    ❌ Sai: GZip chỉ nén tạm thời (3GB có thể giảm còn ~1GB), nhưng file binary VM vẫn quá lớn cho Git (vượt limit push/clone). Không giải quyết versioning hiệu quả cho binary (diff kém), repo vẫn bloat theo thời gian. Không đáp ứng association đúng nghĩa.

  • Store files in Azure Storage and enable blob versions.
    ✅ Đúng: Như giải thích trên, Azure Blob Storage với versioning enabled (tính năng GA 2020, cập nhật MFA Delete 2024) lưu lịch sử blob vĩnh viễn. Commit pointer/URL vào Git để associate. Scale vô hạn cho 3GB+, tích hợp Azure DevOps Artifacts/Pipelines.

📚 Tài liệu tham khảo

Hy vọng phân tích giúp bạn nắm vững! 🚀 Nếu cần demo script Git LFS trên Azure DevOps, hỏi nhé!

Câu 270
You have a project in Azure DevOps that uses an Azure Boards board and stores code in a GitHub repository. The repository contains a file named README.md.

You need to ensure that README.md includes the status of the work items on the board. The solution must minimize administrative effort.

What should you do first?
  1. A Create a GitHub personal access token (PAT).
  2. B Enable GitHub annotations for the board.
  3. C Install the Azure Boards app for GitHub.
  4. D Select Allow anonymous users to access the status badge.
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 tích hợp Azure Boards (trong Azure DevOps) với kho mã nguồn GitHub để hiển thị trạng thái (status) của các work items (như tasks, bugs, user stories) trên bảng kanban/board trực tiếp vào file README.md của repository GitHub.

  • Bối cảnh: Dự án sử dụng Azure Boards để quản lý công việc và GitHub để lưu trữ code (bao gồm file README.md).
  • Yêu cầu chính: README.md phải hiển thị status work items (dưới dạng badge hoặc widget động), đồng thời giảm thiểu nỗ lực quản trị (minimize administrative effort) – nghĩa là ưu tiên giải pháp tự động, dễ thiết lập nhất.
  • Mục tiêu: Tạo status badge (huy hiệu trạng thái) từ Azure Boards query (truy vấn công việc) và nhúng vào README.md qua Markdown. Giải pháp phải bắt đầu từ bước đầu tiên (first step).
  • Phiên bản cập nhật: Dựa trên tài liệu Azure DevOps mới nhất (tính đến 2026), tính năng Azure Boards app for GitHub từ GitHub Marketplace hỗ trợ tích hợp seamless, cho phép tạo public badges mà không cần PAT phức tạp hoặc cấu hình thủ công.

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Install the Azure Boards app for GitHub.

Lý do 🛠️:

  • Đây là bước đầu tiên và đơn giản nhất để kích hoạt tích hợp giữa Azure Boards và GitHub. App này (từ GitHub Marketplace) cho phép tạo status badges tự động từ Azure Boards queries, nhúng trực tiếp vào README.md qua Markdown (ví dụ: [![Board Status](badge-url)]).
  • Giảm thiểu admin effort: Chỉ cần install app một lần cho repo/account, sau đó generate badge URL public (không cần PAT cá nhân hoặc config phức tạp). Badge sẽ cập nhật real-time status work items (done/in progress/etc.).
  • Không có bước nào trước đó bắt buộc; app xử lý authentication qua OAuth và hỗ trợ public access ngay lập tức.

📋 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 tiếng Anh:

  • Create a GitHub personal access token (PAT).
    ❌ Sai. PAT dùng cho integration thủ công (như API calls từ Azure Pipelines đến GitHub), nhưng không phải bước đầu tiên cho status badges trên README.md. Nó yêu cầu effort cao hơn (quản lý scopes, expiry, security), và Azure Boards app đã thay thế bằng OAuth an toàn hơn. Không minimize admin effort.

  • Enable GitHub annotations for the board.
    ❌ Sai. GitHub annotations dùng để post comments tự động vào PRs/Issues từ Azure Boards (như update work item links), chứ không hiển thị status badges trên README.md. Tính năng này yêu cầu policy board-level và không liên quan đến file README.

  • Install the Azure Boards app for GitHub.
    ✅ Đúng. Như đã giải thích ở trên, đây là first step chính xác: Install app từ Marketplace → Connect Azure Boards project → Generate badge URL → Paste vào README.md. Hỗ trợ public/anonymous access tự động, cập nhật đến 2026 với cải tiến OAuth 2.0.

  • Select Allow anonymous users to access the status badge.
    ❌ Sai. Tùy chọn này chỉ làm badge public (sau khi đã có badge từ integration), nhưng không tạo badges và không phải first step. Phải install app trước để generate badge; nếu không, không có gì để allow anonymous. Effort không được minimize vì thiếu integration cốt lõi.