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

Tìm thấy 341 câu.

Câu 271 Chọn nhiều đáp án
You have a build pipeline in Azure Pipelines that uses different jobs to compile an application for 10 different architectures.
The build pipeline takes approximately one day to complete.
You need to reduce the time it takes to execute the build pipeline.
Which two actions should you perform? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
  1. A Move to a blue/green deployment pattern
  2. B Create a deployment group
  3. C Increase the number of parallel jobs
  4. D Reduce the size of the repository
  5. E Create 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 này thuộc về Azure Pipelines trong Azure DevOps (không liên quan trực tiếp đến AWS như mô tả ban đầu, có thể là nhầm lẫn). Tình huống: Bạn có một build pipeline sử dụng nhiều jobs khác nhau để compile ứng dụng cho 10 architectures (kiến trúc khác nhau, ví dụ: x86, ARM, v.v.). Pipeline hiện mất khoảng một ngày để hoàn thành.
Mục tiêu: Giảm thời gian thực thi pipeline.
Loại câu hỏi: Multiple correct answers (chọn hai hành động đúng, mỗi lựa chọn đúng đáng 1 điểm).
Vấn đề cốt lõi là pipeline đang chạy tuần tự (sequential) các jobs, dẫn đến thời gian dài. Giải pháp cần tập trung vào tối ưu hóa song song hóa (parallelization) để các jobs compile chạy đồng thời trên nhiều agents.
(Kiến thức cập nhật: Azure DevOps Pipelines phiên bản mới nhất 2024-2026 hỗ trợ parallel jobs lên đến hàng trăm với Microsoft-hosted agents hoặc self-hosted pools, theo docs Azure DevOps.)

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

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

  • Increase the number of parallel jobs
  • Create an agent pool

Lý do chọn:

  • Pipeline có 10 jobs compile độc lập → Chạy song song (parallel) sẽ giảm thời gian từ 1 ngày xuống chỉ còn thời gian của job dài nhất (thay vì tổng thời gian tất cả jobs).
  • Increase the number of parallel jobs: Tăng số jobs chạy đồng thời (cấu hình trong YAML hoặc UI: strategy: matrix hoặc parallel count).
  • Create an agent pool: Tạo pool agents tự host (self-hosted) để cung cấp nhiều agents chạy parallel jobs, vì hosted pools miễn phí có giới hạn (1-10 parallel mặc định, có thể mua thêm).
    Kết hợp hai hành động này giải quyết triệt để bottleneck parallel execution. 🛠️

📋 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:

  • ❌ Move to a blue/green deployment pattern
    Phương án SAI. Blue/green là chiến lược deployment (triển khai zero-downtime bằng cách switch traffic giữa hai môi trường), không ảnh hưởng đến thời gian build/compile trong pipeline. Nó chỉ tối ưu deployment stage, không giải quyết vấn đề jobs compile sequential mất 1 ngày.

  • ❌ Create a deployment group
    Phương án SAI. Deployment group dùng để quản lý nhóm máy chủ/target cho deployment (như VM, containers), thuộc deployment jobs chứ không phải build/compile. Không giúp giảm thời gian execute build pipeline.

  • ✅ Increase the number of parallel jobs
    Phương án ĐÚNG. Trực tiếp cho phép chạy nhiều jobs đồng thời (sử dụng parallel strategy trong YAML pipeline). Với 10 architectures, tăng parallel count lên 10 sẽ giảm thời gian đáng kể (từ sequential ~1 ngày xuống parallel ~job dài nhất). Hỗ trợ tối đa trong Azure DevOps 2026 với auto-scaling pools.

  • ❌ Reduce the size of the repository
    Phương án SAI. Giảm kích thước repo chỉ tối ưu checkout step (tải source code nhanh hơn), nhưng vấn đề chính là compile jobs cho 10 architectures mất lâu (CPU-intensive). Lợi ích nhỏ, không giải quyết cốt lõi parallelization.

  • ✅ Create an agent pool
    Phương án ĐÚNG. Tạo agent pool (self-hosted hoặc extension hosted) cung cấp nhiều agents để hỗ trợ parallel jobs. Mặc định, free tier chỉ 1 parallel job → Tạo pool mới + cài agents trên VM/multi-machine để chạy 10 jobs cùng lúc, giảm thời gian build hiệu quả.

📘 Tài liệu tham khảo

Câu 272
You are using GitHub as a source code repository.
You create a client-side Git hook on the commit-msg event. The hook requires that each commit message contain a custom work item tag.
You need to make a commit that does not have a work item tag.
Which git commit parameter should you use?
  1. A --squash
  2. B --no-verify
  3. C --message ''
  4. D --no-post-rewrite
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 xoay quanh việc sử dụng GitHub làm kho lưu trữ mã nguồn (source code repository). Người dùng đã tạo một client-side Git hook trên sự kiện commit-msg. Hook này bắt buộc mỗi thông điệp commit (commit message) phải chứa một thẻ công việc tùy chỉnh (custom work item tag), ví dụ như một tag liên kết với ticket hoặc issue.

📌 Tình huống vấn đề: Bạn muốn thực hiện một commit KHÔNG có thẻ work item tag này, nhưng hook sẽ chặn commit nếu thiếu tag. Câu hỏi yêu cầu xác định tham số git commit nào (git commit parameter) để vượt qua hook và commit thành công.

🛠️ Bối cảnh kỹ thuật:

  • Git hooks là các script chạy tự động trước/sau các sự kiện Git (client-side ở repo local).
  • Sự kiện commit-msg chạy sau khi viết commit message nhưng trước khi commit hoàn tất, kiểm tra và có thể từ chối commit nếu không hợp lệ.
  • Đây là kiến thức Git chuẩn, không thay đổi đến năm 2026 (Git 2.45+ vẫn giữ nguyên cơ chế hooks).

✅ Đáp án đúng: --no-verify

Lý do lựa chọn:
Tham số --no-verify (hay --no-v) bỏ qua toàn bộ các Git hooks liên quan đến commit, bao gồm pre-commit và commit-msg. Nó cho phép commit mà không chạy script kiểm tra, giúp vượt qua yêu cầu bắt buộc có work item tag. Đây là cách chuẩn để "tắt tạm thời" hooks khi cần commit khẩn cấp hoặc test.

Ví dụ sử dụng:

git commit -m "My commit without tag" --no-verify

✅ Kết quả: Commit thành công, bỏ qua hook commit-msg.

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

  • ❌ --squash
    Phương án này SAI vì --squash dùng để nén nhiều commit thành một (thường trong rebase hoặc merge), không liên quan đến việc bỏ qua hooks. Nó chỉ thay đổi cách commit được tạo, nhưng hook commit-msg vẫn chạy và chặn nếu thiếu tag.

  • ✅ --no-verify
    Phương án này ĐÚNG như đã giải thích ở trên. Nó tắt verify hooks (pre-commit và commit-msg), cho phép commit mà không kiểm tra message. Đây là giải pháp trực tiếp và an toàn nhất cho tình huống.

  • ❌ --message ''
    Phương án này SAI vì --message '' (hoặc -m '') chỉ đặt commit message rỗng, không bỏ qua hook. Hook commit-msg vẫn kiểm tra message rỗng (vẫn thiếu tag) và từ chối commit, dẫn đến lỗi.

  • ❌ --no-post-rewrite
    Phương án này SAI vì --no-post-rewrite ngăn chạy post-rewrite hook (chạy sau rebase/cherry-pick), không ảnh hưởng đến commit-msg hook (chạy trước commit). Hook vẫn chặn commit thiếu tag.

📘 Tài liệu tham khảo

  • Git Documentation chính thức (cập nhật Git 2.45, 2024-2026):
    git-commit(1) Manual Page – Chi tiết --no-verify bỏ qua hooks.
    githooks(5) – Mô tả commit-msg hook.
  • GitHub Docs: About Git hooks – Xác nhận client-side hooks và cách bypass.
  • Pro Git Book (2nd Edition): Chương 7 – Git Hooks (miễn phí tại git-scm.com/book).

🛠️ Lời khuyên từ Azure DevOps Engineer Expert: Trong Azure DevOps hoặc GitHub, hooks giúp enforce policy (như liên kết work items), nhưng --no-verify là "cứu cánh" tạm thời. Nên dùng branch riêng hoặc fix policy thay vì lạm dụng!

Câu 273
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: pr


Does this meet the goal?
  1. A Yes
  2. B No
Xem giải thích

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

Câu hỏi thuộc dạng case study trong kỳ thi chứng chỉ (có thể là AZ-400 hoặc tương tự), nơi mô tả một kịch bản sử dụng Azure Pipelines để build và release web apps. Yêu cầu cụ thể của pipeline là:

  • Chỉ chạy khi có thay đổi trong thư mục /webapp (path filter).
  • Chỉ chạy khi một Pull Request (PR) được tạo (PR trigger).

Giải pháp đề xuất (dùng YAML syntax):

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

Câu hỏi hỏi: Giải pháp này có đáp ứng yêu cầu không? (Does this meet the goal?).
📘 Lưu ý quan trọng: Đây là câu hỏi kiểu "select one", không quay lại được sau khi trả lời. Kiến thức dựa trên Azure Pipelines YAML schema phiên bản mới nhất (2024-2026) từ tài liệu Microsoft Learn, nơi trigger dành cho CI pushes/merges, còn pr riêng biệt cho Pull Requests.

✅ Đáp án đúng: No

Lý do chọn đáp án đúng (bằng tiếng Việt rõ ràng):
Giải pháp KHÔNG đáp ứng vì sử dụng sai trigger block. Trong Azure Pipelines:

  • trigger chỉ kích hoạt pipeline khi push/merge code vào branch (không phải PR).
  • branches: include: pr chỉ khớp với branch có tên chính xác là "pr" (không phải Pull Request). PR cần dùng block pr: riêng biệt.
  • Để đạt yêu cầu, phải dùng:
    trigger: none  # Tắt CI trigger
    pr:
      branches: include: ['*']  # Hoặc branch cụ thể
      paths:
        include: ['/webapp/*']
    

🛠️ Kết quả: Pipeline sẽ chạy sai (chỉ trên push vào branch "pr"), không giới hạn đúng PR + path /webapp.

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

📋 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 vì: Phương án này cho rằng code YAML trên đúng, nhưng thực tế trigger không xử lý PR (Pull Request). Nó chỉ trigger khi push/merge vào branch tên "pr" cụ thể, bỏ qua path filter đúng cách cho PR. Không đáp ứng "only run when PR is created" – dẫn đến pipeline chạy không mong muốn hoặc miss PR thực tế.

  • No ✅
    Đúng vì: Giải pháp đề xuất không meet the goal do nhầm lẫn trigger (cho branch pushes) với pr (cho Pull Requests). Path /webapp chỉ hiệu quả trong pr: block, kèm trigger: none để tránh trigger thừa. Đây là lỗi phổ biến, xác nhận qua docs Microsoft (YAML triggers tách biệt rõ ràng từ 2019 và giữ nguyên đến 2026).

Câu 274
You plan to use a NuGet package in a project in Azure DevOps. The NuGet package is in a feed that requires authentication.
You need to ensure that the project can restore the NuGet package automatically.
What should the project use to automate the authentication?
  1. A an Azure Automation account
  2. B an Azure Artifacts Credential Provider
  3. C an Azure Active Directory (Azure AD) account that has multi-factor authentication (MFA) enabled
  4. D an Azure Active Directory (Azure AD) service principal
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 và khôi phục (restore) gói NuGet trong một dự án trên Azure DevOps. Cụ thể:

  • Bạn đang sử dụng một gói NuGet từ một feed yêu cầu xác thực (authentication) (thường là feed private trên Azure Artifacts).
  • Mục tiêu là đảm bảo dự án có thể tự động khôi phục gói NuGet mà không cần can thiệp thủ công, đặc biệt trong các pipeline build/release tự động.
  • Vấn đề cốt lõi: Xác thực tự động cho feed NuGet trong môi trường CI/CD của Azure DevOps.

📘 Bối cảnh kỹ thuật (cập nhật đến 2026): Azure Artifacts là dịch vụ quản lý gói (package management) tích hợp trong Azure DevOps, hỗ trợ NuGet, npm, Maven... Feed private yêu cầu PAT (Personal Access Token), service principal hoặc credential provider để auth. Phiên bản mới nhất (Azure DevOps Server 2022 và Azure DevOps Services 2024+) nhấn mạnh sử dụng Credential Provider để tự động hóa auth trong dotnet restore, nuget restore mà không lộ token.

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

Đáp án đúng: an Azure Artifacts Credential Provider
🛠️ Lý do: Azure Artifacts Credential Provider là công cụ chính thức của Microsoft để tự động xử lý xác thực cho các công cụ như nuget.exe, dotnet restore khi restore gói từ feed Azure Artifacts yêu cầu auth. Nó tích hợp với VSS-NuGet.exe (nay là Microsoft Credential Provider), sử dụng PAT hoặc service connection để auth mà không cần hardcode token. Điều này hoàn hảo cho pipeline tự động, hỗ trợ Windows/Linux/macOS. (Cập nhật 2026: Hỗ trợ OAuth 2.0 và AAD cho feed cross-tenant).

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

  • ❌ an Azure Automation account
    Phương án này sai vì Azure Automation dùng cho tự động hóa script Runbook (PowerShell/Python), không liên quan đến auth NuGet feed. Nó không hỗ trợ credential cho dotnet restore tự động trong build pipeline. Sử dụng sai ngữ cảnh!

  • ✅ an Azure Artifacts Credential Provider
    Phương án này đúng như đã giải thích ở trên. Đây là giải pháp chuẩn, được Microsoft khuyến nghị trong docs để automate auth cho NuGet restore. Cài đặt qua vsts-nuget-auth tool và tích hợp trực tiếp vào Pipeline YAML/Task.

  • ❌ an Azure Active Directory (Azure AD) account that has multi-factor authentication (MFA) enabled
    Phương án này sai vì tài khoản AAD cá nhân với MFA không thể dùng tự động trong non-interactive pipeline (MFA yêu cầu tương tác thủ công). Nó không tương thích với NuGet restore tự động, dễ fail build do thiếu headless auth.

  • ❌ an Azure Active Directory (Azure AD) service principal
    Phương án này sai (dù gần đúng) vì service principal dùng cho auth API/resource (như Azure CLI), nhưng không trực tiếp automate NuGet restore. Cần Credential Provider để wrap SPN/PAT. Sử dụng riêng lẻ sẽ yêu cầu config phức tạp, không phải giải pháp tự động chuẩn.

📚 Tài liệu tham khảo

🧠 Lời khuyên: Trong thực tế, thêm task NuGetAuthenticate@1 vào YAML pipeline để kích hoạt Credential Provider tự động!

Câu 275 Chọn nhiều đáp án
You manage source control by using GitHub.

You have a file named Data.txt that contains sensitive data. A user pushes Data.txt to a repository.

You need to purge the file from the repository.

Which two commands can you use? Each correct answer presents a complete solution.

NOTE: Each correct solution is worth one point.
  1. A git checkout
    git reset -hard -pathspec data.txt
  2. B git checkout
    git clean -d data.txt --force
  3. C bfg --delete-files data.txt
    git push --force
  4. D git rm data.txt
    git push --force
  5. E git filter-repo --invert-paths --path data.txt
    git push origin --force --all
  6. F git revert -edit data.txt
    git push -force
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 tập trung vào việc quản lý source control sử dụng GitHub (không trực tiếp liên quan AWS, mà là Git/GitHub repository). Bạn có một file Data.txt chứa dữ liệu nhạy cảm (sensitive data). Một người dùng đã push file này lên repository. Nhiệm vụ là purge (xóa hoàn toàn) file khỏi repository, nghĩa là không chỉ xóa khỏi working directory mà phải xóa vĩnh viễn khỏi toàn bộ lịch sử commit (history) của Git repo để tránh rò rỉ dữ liệu nhạy cảm.

Câu hỏi yêu cầu chọn hai lệnh (commands) có thể sử dụng, mỗi lệnh đúng là một giải pháp hoàn chỉnh (complete solution). Đây là tình huống phổ biến trong DevOps khi cần rewrite Git history một cách an toàn. Lưu ý: Các lệnh thông thường như git rm chỉ xóa file khỏi index hiện tại, không xóa khỏi các commit cũ, nên dữ liệu vẫn tồn tại trong history và có thể bị truy xuất qua git log hoặc clone repo.

✅ Đáp án đúng (hai lựa chọn):

  • bfg --delete-files data.txt followed by git push --force
  • git filter-repo --invert-paths --path data.txt followed by git push origin --force --all

🛠️ Lý do chọn đáp án đúng:
Những lệnh này sử dụng công cụ chuyên dụng để rewrite toàn bộ Git history, xóa file Data.txt khỏi mọi commit, tag, và reflog. Sau đó, git push --force (hoặc --force --all) đẩy thay đổi lên GitHub, ghi đè history cũ. Đây là cách purge hoàn toàn sensitive data, phù hợp với best practices bảo mật trên GitHub (đặc biệt khi repo public hoặc shared). GitHub khuyến nghị sử dụng các tool này thay vì git filter-branch (đã deprecated).

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

  • ❌ git checkout
    git reset -hard -pathspec data.txt
    Sai: git checkout chỉ checkout file từ một commit cụ thể, không xóa khỏi history. git reset --hard --pathspec data.txt (lưu ý cú pháp sai: thiếu -- trước pathspec) chỉ reset working tree/index về trạng thái clean, không rewrite history. File vẫn tồn tại trong các commit cũ, không purge được sensitive data.

  • ❌ git checkout
    git clean -d data.txt --force
    Sai: git checkout không liên quan. git clean -d --force xóa các file untracked (không theo dõi) trong working directory, bao gồm directories (-d). Không ảnh hưởng đến history; file đã commit/push vẫn còn nguyên, chỉ dọn dẹp local untracked files.

  • ✅ bfg --delete-files data.txt
    git push --force
    Đúng: BFG Repo-Cleaner là công cụ Java nhanh chóng, chuyên xóa file/large files khỏi toàn bộ history (commits, tags). --delete-files data.txt xóa chính xác file đó. Sau đó git push --force cập nhật remote repo trên GitHub. Đây là giải pháp hoàn chỉnh, an toàn cho repo lớn. (BFG vẫn được hỗ trợ đến 2026).

  • ❌ git rm data.txt
    git push --force
    Sai: git rm data.txt chỉ xóa file khỏi working tree và index, stage một commit mới để remove nó. git push --force đẩy commit đó, nhưng history cũ vẫn giữ file (có thể recover qua git log -- data.txt). Không purge sensitive data thực sự.

  • ✅ git filter-repo --invert-paths --path data.txt
    git push origin --force --all
    Đúng: git-filter-repo (Python tool, được Git project recommend từ 2018, thay thế filter-branch) rewrite history bằng cách loại bỏ chính xác path data.txt (--invert-paths nghĩa là giữ tất cả trừ path chỉ định). --path data.txt target file. git push origin --force --all đẩy tất cả branches/tags lên GitHub, purge hoàn toàn. Đây là best practice mới nhất (cập nhật 2023-2026).

  • ❌ git revert -edit data.txt
    git push -force
    Sai: git revert tạo commit mới đảo ngược thay đổi của commit cụ thể (không phải xóa file), với -edit để chỉnh sửa message. Không xóa history, chỉ thêm commit revert – sensitive data vẫn còn trong commit gốc. --force không liên quan vì revert không cần force push.

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

💡 Lời khuyên DevOps: Luôn backup repo trước khi force push (git clone riêng). Với Azure DevOps/GitHub integration, dùng GitHub Actions để automate purge nếu cần scale. Nếu repo AWS-related (như CodeCommit), nguyên tắc tương tự nhưng dùng AWS CLI cho mirror.

Câu 276
You manage a project by using Azure Boards, 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 fixed
  2. B #123 Resolved-
  3. C Verifies #123-
  4. D Resolves #123-
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 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 với work item trong Azure Boards để tự động cập nhật trạng thái (state) của work item.

  • Bạn đang quản lý dự án bằng Azure Boards (quản lý work items như bug, task) và Azure Repos (quản lý mã nguồn Git).
  • Có một bug work item với ID là 123.
  • Mục tiêu: Khi commit code, thêm một cụm từ đặc biệt vào commit message để tự động đặt trạng thái của work item này thành Resolved (đã giải quyết, nhưng chưa hoàn toàn đóng).
  • Đây là tính năng linking work items qua commit message keywords của Azure DevOps, giúp tự động hóa quy trình DevOps mà không cần chỉnh sửa thủ công trên Boards.

Tính năng này dựa trên phiên bản mới nhất Azure DevOps Services (2024-2026), hỗ trợ các keyword chuẩn để trigger state transitions như New → Active → Resolved → Closed.

📘 Tài liệu tham khảo chính:
Microsoft Docs - Link work items to support traceability
Commit message keywords for updating work item states

✅ Đáp án đúng: #123 fixed

  • Lý do chọn: Trong Azure DevOps, keyword #ID fixed (với ID là 123) là cú pháp chuẩn để tự động đặt trạng thái work item thành Resolved. Khi commit với message chứa "#123 fixed", hệ thống sẽ:
    • Liên kết commit với bug #123.
    • Chuyển state từ Active/Committed sang Resolved (bug đã được fix qua code).
    • Hiển thị liên kết trên work item history.
  • Đây là keyword được hỗ trợ chính thức, đơn giản và phổ biến cho bug fixing. ✅ Hoạt động ngay lập tức sau push commit.

🛠️ Phân tí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 bằng tiếng Anh. Chỉ keyword đúng mới trigger state Resolved; các sai lệch về syntax (dấu -, thứ tự từ) sẽ bị bỏ qua.

  • #123 fixed
    ✅ Đúng: Như giải thích trên, đây là keyword chuẩn (#ID theo sau bởi "fixed") để set state thành Resolved. Azure DevOps nhận diện và xử lý tự động.

  • #123 Resolved-
    ❌ Sai:

    • "Resolved-" không phải keyword hợp lệ. Keyword đúng phải là "#ID resolved" (không có dấu - ở cuối).
    • Dấu - làm syntax bị lỗi, Azure DevOps chỉ link work item (#123) nhưng không thay đổi state. State vẫn giữ nguyên (ví dụ: Active).
  • Verifies #123-
    ❌ Sai:

    • "Verifies" dành cho test cases hoặc verified bugs (set state thành Verified hoặc Closed trong một số workflow tùy chỉnh).
    • Thứ tự "Verifies #ID-" sai cú pháp (phải là "#ID verifies" hoặc "verifies #ID" không dấu -). Dấu - làm vô hiệu hóa. Kết quả: Chỉ link, không set Resolved.
  • Resolves #123-
    ❌ Sai:

    • "Resolves" là keyword đúng để set Resolved (tương đương "resolves #ID"), nhưng dấu - ở cuối làm syntax không hợp lệ.
    • Azure DevOps yêu cầu chính xác "Resolves #123" (không dấu -). Với dấu -, chỉ link work item mà không trigger state change.

Lưu ý chung 🧩:

  • Syntax phải chính xác 100% (case-insensitive, nhưng không thừa ký tự như -). Test bằng cách commit thực tế trong repo.
  • Nếu dùng branch policies hoặc PRs, keyword cũng hoạt động tương tự để auto-update.
  • Cập nhật 2026: Không thay đổi core syntax, nhưng hỗ trợ thêm AI-assisted linking qua GitHub Copilot for Azure DevOps.

Hy vọng phân tích giúp bạn nắm vững! 🚀 Nếu cần ví dụ code commit, hỏi thêm nhé!

Câu 277
You are creating a build pipeline in Azure Pipelines.
You define several tests that might fail due to third-party applications.
You need to ensure that the build pipeline completes successfully if the third-party applications are unavailable.
What should you do?
  1. A Configure the build pipeline to use parallel jobs
  2. B Configure flaky tests
  3. C Increase the test pass percentage
  4. D Add the Requirements quality widget to your dashboard
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 việc xử lý các bài kiểm tra (tests) không ổn định (flaky tests) trong Azure Pipelines – một dịch vụ CI/CD thuộc Azure DevOps. Cụ thể:

  • Bạn đang tạo một build pipeline (đường ống xây dựng).
  • Có một số tests có thể thất bại (fail) do phụ thuộc vào ứng dụng bên thứ ba (third-party applications), chẳng hạn như dịch vụ bên ngoài tạm thời không khả dụng (unavailable).
  • Mục tiêu: Đảm bảo pipeline hoàn thành thành công (completes successfully) ngay cả khi third-party apps không sẵn sàng, tránh tình trạng pipeline fail toàn bộ chỉ vì tests flaky.

📘 Bối cảnh kỹ thuật: Flaky tests là các tests cho kết quả không nhất quán (đôi khi pass, đôi khi fail) do yếu tố bên ngoài như mạng, API third-party. Azure DevOps cung cấp tính năng Flaky Test Detection (từ năm 2023, cập nhật liên tục đến 2026) để tự động phát hiện, retry (chạy lại) và bỏ qua nếu cần, giúp pipeline không bị fail không đáng có.

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

Đáp án đúng: Configure flaky tests
✅ Lý do: Azure Pipelines hỗ trợ cấu hình Flaky Test Detection (phiên bản mới nhất 2026), tự động phát hiện tests flaky qua phân tích lịch sử chạy test. Khi tests fail do third-party unavailable, hệ thống sẽ tự động rerun (chạy lại) tests đó (mặc định 3 lần). Nếu vẫn fail sau retry, pipeline vẫn continue và đánh dấu là flaky thay vì fail toàn bộ. Điều này đảm bảo pipeline completes successfully mà không cần can thiệp thủ công.
🛠️ Cách thực hiện: Trong pipeline YAML, thêm flakyTestDetection: true hoặc cấu hình qua Test Plans.

📘 Nguồn tham khảo:

🔍 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 tiếng Anh. Tôi đánh dấu ✅ đúng / ❌ sai và giải thích rõ ràng:

  • ❌ Configure the build pipeline to use parallel jobs
    Phương án này sai vì parallel jobs chỉ tăng tốc độ chạy bằng cách phân bổ jobs song song trên agents, không giải quyết vấn đề tests fail do third-party. Nó có thể làm tests flaky chạy nhanh hơn nhưng vẫn fail pipeline nếu không pass, không đảm bảo "completes successfully".

  • ✅ Configure flaky tests
    Phương án này đúng như đã giải thích ở trên. Tính năng chuyên biệt để xử lý tests không ổn định, retry tự động và cho phép pipeline succeed dù tests flaky fail tạm thời.

  • ❌ Increase the test pass percentage
    Phương án này sai vì "test pass percentage" là metric báo cáo (qua threshold trong pipeline), nhưng tăng nó chỉ là điều chỉnh yêu cầu (ví dụ: cho phép 90% pass thay vì 100%), không xử lý gốc rễ flaky tests. Pipeline vẫn fail nếu dưới threshold, không đảm bảo complete successfully khi third-party unavailable.

  • ❌ Add the Requirements quality widget to your dashboard
    Phương án này sai vì widget này chỉ là công cụ dashboard visualization để theo dõi chất lượng requirements (từ Azure Boards), không ảnh hưởng đến logic chạy pipeline hay xử lý tests fail. Nó chỉ hiển thị dữ liệu, không ngăn pipeline fail.

Câu 278
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.

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


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âu hỏi này thuộc dạng series (nhiều câu hỏi cùng scenario), yêu cầu cấu hình Azure Pipelines YAML để pipeline chỉ chạy khi có thay đổi trong thư mục /webapp và chỉ chạy khi một Pull Request (PR) được tạo.
Giải pháp đề xuất sử dụng cấu hình YAML sau:

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

Câu hỏi: Does this meet the goal? (Giải pháp này có đáp ứng yêu cầu không?).
Đây là câu hỏi kiểu "Yes/No" điển hình trong kỳ thi Azure DevOps, kiểm tra kiến thức về PR triggers trong Azure Pipelines YAML (phiên bản cập nhật mới nhất Azure DevOps Services đến 2026, hỗ trợ path filters và branch filters chi tiết hơn với wildcard patterns).

✅ Đáp án đúng: No
Lý do lựa chọn: Giải pháp này KHÔNG đáp ứng mục tiêu vì hai lỗi chính:

  • paths: include: /pr → Sai đường dẫn, phải là /webapp hoặc webapp/** để lọc thay đổi chỉ trong thư mục /webapp.
  • branches: include: refs/head/webapp → Format branch reference sai (thiếu 's' ở 'heads' và không phù hợp với PR trigger syntax). PR trigger chỉ chạy trên các branch cụ thể khi PR được tạo, nhưng format đúng phải là tên branch đơn giản như webapp hoặc refs/heads/webapp.
    Kết quả: Pipeline có thể chạy ngoài ý muốn (không giới hạn đúng thư mục và branch), vi phạm cả hai yêu cầu.
    (Kiến thức dựa trên Azure Pipelines YAML schema v2024+, nơi path filters hỗ trợ glob patterns như **/webapp/**).

🛠️ Giải thích tất cả các phương án (giữ nguyên văn bản gốc):

  • Yes ❌ SAI
    Phương án này sai vì giả định giải pháp YAML đề xuất hoàn hảo, nhưng thực tế có hai lỗi nghiêm trọng: (1) /pr không khớp với yêu cầu /webapp, dẫn đến pipeline chạy khi thay đổi ở thư mục sai; (2) refs/head/webapp là format không chuẩn cho PR branches (phải là webapp hoặc refs/heads/webapp), có thể gây trigger trên branch không mong muốn hoặc fail validation. Không đáp ứng "only run when change in /webapp" và "only on PR".

  • No ✅ ĐÚNG
    Phương án này đúng vì giải pháp YAML không khớp yêu cầu: path filter sai (/pr thay vì /webapp), branch filter format lỗi (refs/head/webapp thiếu 's' và không chuẩn YAML PR trigger). Cấu hình đúng phải là:

    pr:
      paths:
        include:
          - webapp/**
      branches:
        include:
          - webapp  # Hoặc refs/heads/webapp
    

    Điều này đảm bảo chỉ trigger PR trên branch webapp với thay đổi trong /webapp.

📘 Tài liệu tham khảo (cập nhật 2026):

💡 Lời khuyên từ Azure DevOps Expert: Để fix, dùng paths: include: ['webapp/**'] và test bằng az pipelines run hoặc UI preview. Nếu cần multi-branch, thêm exclude để tinh chỉnh! 🚀

Câu 279
You use Azure Pipelines to manage project builds and deployments.
You plan to use Azure Pipelines for Microsoft Teams to notify the legal team when a new build is ready for release.
You need to configure the Organization Settings in Azure DevOps to support Azure Pipelines for Microsoft Teams.
What should you turn on?
  1. A Third-party application access via OAuth
  2. B Azure Active Directory Conditional Access Policy Validation
  3. C Alternate authentication credentials
  4. D SSH authentication
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 Azure DevOps Organization Settings để hỗ trợ tích hợp Azure Pipelines với Microsoft Teams. Cụ thể:

  • Bạn đang sử dụng Azure Pipelines để quản lý build và deploy dự án.
  • Kế hoạch: Sử dụng Azure Pipelines for Microsoft Teams để gửi thông báo (notification) cho legal team khi có build mới sẵn sàng release.
  • Yêu cầu: Turn on (bật) một tính năng cụ thể trong Organization Settings của Azure DevOps để kích hoạt tích hợp này.

📘 Bối cảnh kỹ thuật (cập nhật đến 2026): Theo tài liệu chính thức của Microsoft Azure DevOps (phiên bản mới nhất), tích hợp Azure Pipelines với Teams yêu cầu cho phép ứng dụng bên thứ ba truy cập qua OAuth, vì Teams app của Azure Pipelines là một ứng dụng external cần xác thực OAuth để gửi notifications. Điều này nằm trong phần Security > Policies của Organization Settings. Không liên quan đến AWS (có thể là nhầm lẫn chủ đề), mà thuần túy Azure DevOps ecosystem.

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

Đáp án đúng: Third-party application access via OAuth

🛠️ Lý do chi tiết:

  • Tích hợp Azure Pipelines app vào Microsoft Teams yêu cầu Azure DevOps cho phép truy cập từ ứng dụng bên thứ ba (third-party apps) qua cơ chế OAuth 2.0.
  • Khi bật tính năng này trong Organization Settings > Security > Policies, Azure DevOps sẽ cấp quyền cho Teams app (được Microsoft phát triển) kết nối và gửi notifications tự động về builds/releases.
  • Nếu không bật, bạn sẽ gặp lỗi authorization khi cài đặt hoặc sử dụng app trong Teams.
  • Đây là yêu cầu bắt buộc theo hướng dẫn 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)

  • ✅ Third-party application access via OAuth
    Đúng: Đây chính là tính năng cần bật để hỗ trợ OAuth cho các ứng dụng external như Azure Pipelines Teams app. Nó cho phép an toàn kết nối với Teams mà không cần credentials cá nhân. (Reference: Azure DevOps Security Policies).

  • ❌ Azure Active Directory Conditional Access Policy Validation
    Sai: Tính năng này dùng để validate (kiểm tra) Conditional Access Policies từ Azure AD (Entra ID) cho các truy cập vào Azure DevOps. Nó không liên quan đến tích hợp Teams notifications, mà chỉ kiểm soát MFA/điều kiện truy cập user. Bật nó có thể chặn integrations nếu policy nghiêm ngặt, nhưng không phải giải pháp cho Teams app.

  • ❌ Alternate authentication credentials
    Sai: Đây là PAT (Personal Access Tokens) hoặc credentials thay thế cho Basic Auth (đã deprecated). Nó dùng cho scripting/API calls cá nhân, không hỗ trợ OAuth cho third-party apps như Teams. Tính năng này không còn khuyến khích từ 2020 và không liên quan đến Teams integration.

  • ❌ SSH authentication
    Sai: Dùng cho Git SSH keys để clone/push repos an toàn, chủ yếu trong pipelines với private repos. Hoàn toàn không liên quan đến notifications Teams hay OAuth – chỉ là authentication cho source control.

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

Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo config, hãy hỏi thêm.

Câu 280
You use GitHub Enterprise for source control repositories. The repositories store C# code.

You need to enable CodeQL scanning for the repositories.

What should you do?
  1. A Enable Dependabot security updates.
  2. B Enable Dependabot alerts.
  3. C Configure a required GitHub Actions workflow for all the repositories.
  4. D Push a GitHub Actions workflow to all the repositories.
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 việc kích hoạt CodeQL scanning (quét mã nguồn bằng CodeQL) trên các kho lưu trữ (repositories) sử dụng GitHub Enterprise làm hệ thống kiểm soát nguồn (source control). Các repo này chứa mã nguồn C#.
✅ Mục tiêu chính: Tìm cách enable CodeQL scanning cho tất cả các repo một cách hiệu quả.
🛠️ Bối cảnh: CodeQL là công cụ phân tích mã nguồn tĩnh (static analysis) của GitHub, chuyên phát hiện lỗ hổng bảo mật (vulnerabilities) và lỗi trong code. Để chạy CodeQL, cần tích hợp qua GitHub Actions workflow sử dụng các action như codeql-action.
📘 Kiến thức cập nhật: Theo tài liệu GitHub mới nhất (tính đến 2026, phiên bản GitHub Enterprise Server 3.15+ và GitHub.com), CodeQL yêu cầu tạo và đẩy (push) file workflow YAML cụ thể vào thư mục .github/workflows/ của từng repo để kích hoạt quét tự động trên pull request/merge.

✅ Đáp án đúng

Push a GitHub Actions workflow to all the repositories.
Lý do lựa chọn:
🧩 Đây là cách chuẩn và trực tiếp nhất để enable CodeQL scanning theo hướng dẫn chính thức của GitHub. Bạn tạo file workflow YAML (ví dụ: codeql-analysis.yml) sử dụng các action như github/codeql-action/init, github/codeql-action/analyze, sau đó push vào thư mục .github/workflows/ của từng repo. Workflow này sẽ tự động chạy quét CodeQL trên branch chính (default branch) hoặc pull requests.
🛠️ Đối với nhiều repo trong GitHub Enterprise (tại organization level), bạn có thể sử dụng script/automation (như GitHub CLI hoặc API) để push workflow vào tất cả repo, đảm bảo scanning được kích hoạt đồng bộ. Không cần cấu hình nâng cao khác nếu chỉ enable cơ bản.

❌ 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 bằng tiếng Anh. Mỗi phương án được đánh giá đúng/sai dựa trên chức năng thực tế của GitHub Enterprise và CodeQL (cập nhật 2026):

  • Enable Dependabot security updates.
    ❌ Sai: Dependabot security updates chỉ tự động cập nhật dependencies (thư viện bên thứ ba) có lỗ hổng bảo mật trong file như packages.lock.json hoặc csproj (cho C#). Nó không liên quan đến CodeQL scanning, vốn quét mã nguồn tĩnh (source code vulnerabilities) chứ không phải deps. Dependabot dùng dữ liệu từ GitHub Advisory Database, không chạy analysis như CodeQL.

  • Enable Dependabot alerts.
    ❌ Sai: Dependabot alerts chỉ cảnh báo (alert) về lỗ hổng trong dependencies, hiển thị trên tab Security > Vulnerability alerts. Nó không kích hoạt scanning code như CodeQL, mà chỉ theo dõi và notify. Không hỗ trợ quét C# source code.

  • Configure a required GitHub Actions workflow for all the repositories.
    ❌ Sai: Tính năng "required workflows" (có từ GitHub Enterprise 3.10+, cập nhật 2026) dùng để bắt buộc workflow chạy trước khi merge pull request qua branch protection rules (tại organization/repo settings). Tuy nhiên, nó không tự tạo hoặc enable CodeQL scanning – workflow phải tồn tại trước (bằng cách push YAML). Nếu không có workflow CodeQL, required status chỉ kiểm tra workflow khác, không kích hoạt quét.

  • Push a GitHub Actions workflow to all the repositories.
    ✅ Đúng: Như giải thích ở trên, đây là bước bắt buộc và chính xác. GitHub cung cấp template workflow sẵn (qua code scanning setup wizard), bạn generate và push vào repo để CodeQL tự động chạy. Hỗ trợ C# qua CodeQL CLI bundle mới nhất (v2.20+ năm 2026).

📘 Tài liệu tham khảo

🛠️ Lời khuyên từ Azure DevOps Expert: Nếu bạn đang migrate từ Azure Repos sang GitHub Enterprise, hãy dùng GitHub API hoặc Azure Pipelines để automate push workflow vào nhiều repo, tương tự YAML pipelines trong Azure DevOps!