Ngân hàng đề — Microsoft Azure DevOps Engineer Expert
Tìm thấy 341 câu.
You suspect that the team's productivity is low due to accumulate technical debt.
You need to recommend a metric to assess the amount of the team's technical debt.
What should you recommend?
- A the number of code modules in an application
- B the number of unit test failures
- C the percentage of unit test failures
- D the percentage of overall time spent on rework
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 thiết kế chiến lược Azure DevOps cho đội ngũ phát triển của công ty. 🔍 Vấn đề chính là nghi ngờ năng suất đội ngũ thấp do tích lũy technical debt (nợ kỹ thuật – tức là các quyết định phát triển ngắn hạn dẫn đến chi phí bảo trì, sửa chữa cao hơn về sau). Nhiệm vụ là khuyến nghị một metric (chỉ số đo lường) để đánh giá mức độ technical debt của đội ngũ.
🛠️ Bối cảnh Azure DevOps: Trong Azure DevOps (bao gồm Boards, Repos, Pipelines, Test Plans,...), việc đo lường technical debt giúp cải thiện quy trình CI/CD, tăng năng suất qua các công cụ như Analytics, Dashboards và integration với SonarQube hoặc Azure Test Plans. Metric cần phải định lượng được thời gian lãng phí do debt, phù hợp với best practices từ Microsoft DevOps (cập nhật đến Azure DevOps Server 2022 và Azure DevOps Services 2024+, vẫn áp dụng đến 2026).
📘 Tài liệu tham khảo:
- Microsoft Docs: Measure technical debt in Azure DevOps (cập nhật 2024).
- DORA Metrics (tích hợp Azure DevOps): "Accelerate State of DevOps Report 2023" – nhấn mạnh rework time làm metric chính cho debt.
- Azure DevOps Best Practices: Technical Debt Quadrant.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: the percentage of overall time spent on rework
Lý do chi tiết 🏆:
Metric này trực tiếp đo lường technical debt bằng cách tính tỷ lệ phần trăm thời gian tổng thể mà đội ngũ dành cho rework (sửa chữa lỗi, refactor code do các quyết định kém trước đó). Trong Azure DevOps, bạn có thể track qua Work Items (Bugs, Tasks refactor), Time Tracking extension, hoặc Analytics views. Đây là DORA Elite Performer metric (tỷ lệ rework <20% cho team high-performing). Nó phản ánh chính xác nợ kỹ thuật vì debt làm tăng thời gian bảo trì lên đến 20-30% tổng effort (theo State of DevOps 2023). Không metric nào khác định lượng "chi phí thời gian" rõ ràng như vậy!
❌ 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 chi tiết, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá dựa trên tính liên quan đến technical debt trong Azure DevOps (không phải AWS – câu hỏi rõ ràng về Azure).
-
Phương án SAI:
the number of code modules in an application
❌ Lý do sai: Số lượng module code chỉ đo kích thước ứng dụng (complexity về quy mô), không phản ánh debt. Một app có nhiều module nhưng code sạch vẫn low-debt. Không track được trong Azure Repos một cách ý nghĩa cho debt assessment. -
Phương án SAI:
the number of unit test failures
❌ Lý do sai: Số lượng unit test fail chỉ ra vấn đề chất lượng code hiện tại, nhưng không đo tích lũy debt lâu dài (có thể do test suite kém chứ không phải debt). Trong Azure Test Plans, metric này hữu ích cho regression nhưng không định lượng thời gian lãng phí do debt. -
Phương án SAI:
the percentage of unit test failures
❌ Lý do sai: Tỷ lệ unit test fail đo code coverage và reliability, nhưng vẫn gián tiếp và không capture rework effort do debt cũ (ví dụ: test fail do legacy code rối). Azure Pipelines báo cáo metric này tốt, nhưng Microsoft khuyến nghị dùng rework % thay thế cho debt chính xác hơn. -
Phương án ĐÚNG:
the percentage of overall time spent on rework
✅ Lý lý do đúng (tóm tắt lại): Như đã giải thích ở trên, đây là metric chuẩn, actionable trong Azure DevOps Dashboards, giúp prioritize debt repayment (refactoring sprints). Theo cập nhật 2024-2026, tích hợp AI Insights trong Azure DevOps tự động gợi ý metric này cho low-productivity teams.
🧠 Kết luận khuyến nghị: Implement metric này qua Azure Boards Queries + Power BI integration để dashboard real-time. Nếu team rework >25%, ưu tiên "debt sprints"! 🚀
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 need to use an Azure Pipelines pipeline to build and test an app and test the database of the app. The solution must meet the following requirements.
•The test stages must be run in parallel.
•The Publish_Test_Results stage must always be run.
•The test stages must be run after successful completion of the build stage.
•The Publish_Test_Results stage must be run after completion of all the test stages.
Solution: You include the following elements in the YAML definition of the pipeline.
stages:
- stage: Build_App
jobs:
- stage: Test_App
dependsOn: [Build_App]
jobs:
- stage: Test_Database
dependsOn: [Build_App]
jobs:
- stage: Publish_Test_Results
jobs:
...
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi thuộc dạng series questions trong kỳ thi chứng chỉ (có thể là AZ-400 hoặc tương tự về Azure DevOps), nơi mỗi câu đưa ra một scenario giống nhau nhưng solution khác nhau. Bạn không thể quay lại sau khi trả lời, nên cần phân tích kỹ.
Scenario chính: Sử dụng Azure Pipelines (YAML) để build và test một app + database, với các yêu cầu nghiêm ngặt:
✅ Test stages phải chạy song song (parallel).
✅ Publish_Test_Results stage phải luôn chạy (không skip).
✅ Test stages chỉ chạy sau khi build stage hoàn thành thành công.
✅ Publish_Test_Results chỉ chạy sau khi tất cả test stages hoàn thành.
Solution đề xuất (YAML snippet):
stages:
- stage: Build_App
jobs:
- stage: Test_App
dependsOn: [Build_App]
jobs:
- stage: Test_Database
dependsOn: [Build_App]
jobs:
- stage: Publish_Test_Results
jobs:
...
Câu hỏi: Solution này có đáp ứng yêu cầu (meet the goal) không?
Vấn đề cốt lõi 🛠️: YAML này có lỗi cú pháp nghiêm trọng theo schema Azure Pipelines (phiên bản mới nhất 2024-2026). Stages không thể lồng trực tiếp vào jobs của stage khác; jobs chỉ chứa job (không phải stage). Điều này làm pipeline không parse được, dẫn đến thất bại ngay từ đầu.
✅ Đáp án đúng: No
Lý do chọn đáp án đúng 📘:
- Solution vi phạm cú pháp YAML của Azure Pipelines:
jobstrong stage chỉ chấp nhậnjob, không phảistagelồng nhau. Pipeline sẽ fail validation khi chạy (lỗi "Unexpected value 'stage'"). - Không đảm bảo parallel: Test_App và Test_Database bị lồng lệch (Test_Database nằm trong jobs của Test_App?), không parallel đúng cách.
- Không kiểm soát thứ tự đúng: Publish_Test_Results thiếu
dependsOnrõ ràng với tất cả test stages; nó bị lồng sai vị trí. - Publish không "always run": Nếu test fail, cấu trúc sai có thể skip hoặc fail toàn bộ.
Kết quả: KHÔNG meet the goal. (Áp dụng schema YAML mới nhất từ Microsoft Learn, hỗ trợ multi-stage pipelines từ 2019, cập nhật 2026 vẫn giữ nguyên quy tắc này).
📋 Phân tích tất cả các phương án
-
Yes ❌ SAI: Phương án này cho rằng solution đúng, nhưng YAML lỗi cú pháp cơ bản (stage lồng trong jobs). Không parallel test stages (Test_Database bị "nested" vào Test_App thay vì parallel), Publish_Test_Results không depend đúng tất cả tests. Pipeline fail ngay, không đáp ứng yêu cầu.
-
No ✅ ĐÚNG: Như giải thích trên, solution không hợp lệ do vi phạm schema. Để đúng, cần cấu trúc YAML chuẩn như:
stages: - stage: Build_App # Build trước jobs: [...] - stage: Test_App dependsOn: Build_App jobs: [...] - stage: Test_Database dependsOn: Build_App # Parallel với Test_App jobs: [...] - stage: Publish_Test_Results dependsOn: [Test_App, Test_Database] # Chạy sau tất cả tests, alwaysRun: true nếu cần condition: always() # Để always run jobs: [...](Sử dụng
dependsOnarray cho parallel và sequence).
📚 Tài liệu tham khảo
- Microsoft Docs chính thức (cập nhật 2026): YAML schema reference – Quy định
stages > stage > jobs > job. - Multi-stage pipelines: Author multi-stage YAML – Hướng dẫn dependsOn và parallel.
- Conditions & alwaysRun: Stage conditions.
- Best practices 2026: Hỗ trợ GitHub Actions hybrid, nhưng YAML core không thay đổi.
Hy vọng phân tích giúp bạn nắm vững! 🚀 Nếu cần ví dụ YAML đầy đủ, hỏi thêm nhé!
You need to ensure that all the open source libraries comply with your company's licensing standards.
Which service should you use?
- A NuGet
- B Maven
- C Black Duck
- D Helm
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, một nền tảng CI/CD của Microsoft dùng để quản lý dự án phát triển phần mềm. Cụ thể:
- Bạn có một dự án Azure DevOps chứa build pipeline (quy trình xây dựng tự động).
- Pipeline này sử dụng khoảng 50 thư viện mã nguồn mở (open source libraries).
- Yêu cầu chính: Đảm bảo tất cả các thư viện này tuân thủ tiêu chuẩn cấp phép (licensing standards) của công ty, nghĩa là kiểm tra license (giấy phép sử dụng) để tránh vi phạm pháp lý như GPL, MIT, Apache, v.v.
- Mục tiêu: Chọn dịch vụ phù hợp để quét và kiểm tra compliance license cho các thư viện open source trong pipeline build.
📘 Lưu ý kiến thức cập nhật: Theo tài liệu Azure DevOps mới nhất (tính đến 2026), Azure hỗ trợ tích hợp các công cụ Software Composition Analysis (SCA) như Black Duck để kiểm tra SBOM (Software Bill of Materials) và license compliance trong pipelines. Không liên quan trực tiếp đến AWS, dù câu hỏi có đề cập chủ đề (có thể nhầm lẫn).
✅ Đáp án đúng: Black Duck
Lý do lựa chọn:
- Black Duck (của Synopsys) là công cụ SCA chuyên dụng để phân tích thành phần phần mềm, bao gồm kiểm tra license compliance cho open source libraries một cách toàn diện.
- Nó tích hợp trực tiếp với Azure DevOps Pipelines qua tasks/extensions (Azure DevOps Marketplace), quét tự động trong build process, phát hiện rủi ro license (ví dụ: copyleft vs. permissive), và tạo báo cáo chi tiết.
- Hỗ trợ 50+ ngôn ngữ lập trình và hàng triệu components, phù hợp với quy mô 50 libraries.
- Cập nhật 2026: Black Duck hỗ trợ Polar Graph (SBOM visualization) và tích hợp AI-driven risk scoring cho license.
Nguồn tham khảo:
- Azure DevOps Marketplace - Black Duck
- Synopsys Black Duck Documentation
- Azure DevOps Pipeline Security Best Practices
🛠️ Giải thích tất cả các phương án
-
NuGet ❌
Sai vì: NuGet là package manager cho .NET (tương tự npm cho JS), dùng để quản lý và tải packages trong dự án .NET trên Azure DevOps. Nó không có tính năng quét license compliance tự động; chỉ cung cấp metadata license cơ bản, không đủ để kiểm tra toàn diện 50 libraries đa ngôn ngữ. -
Maven ❌
Sai vì: Maven là build tool và package manager cho Java, dùng trong pipelines để compile và dependency management. Nó có plugin cơ bản kiểm tra license (như maven-license-plugin), nhưng không phải dịch vụ toàn diện cho SCA và không tích hợp native với Azure DevOps cho multi-language như câu hỏi yêu cầu. -
Black Duck ✅
Đúng vì: Như giải thích ở trên, đây là dịch vụ SCA chuyên biệt cho license compliance và security scanning open source, tích hợp hoàn hảo với Azure DevOps build pipelines. -
Helm ❌
Sai vì: Helm là package manager cho Kubernetes (charts), dùng để deploy ứng dụng containerized. Nó không liên quan đến kiểm tra license libraries trong build pipeline; chỉ quản lý deployment, không phải SCA.
You need to clone repo1. The solution must meet the following requirements:
•You must be able to search the commit history of the /src directory
•The amount of time it takes to clone the repository must be minimized
Which command should you run?
- A git clone –-depth-1 git@ssh.dev.azure.com:v3/org/Project1/repo1
- B git clone –-filter=blob:none git@ssh.dev.azure.com:v3/org/Project1/repo1
- C git clone git@ssh.dev.azure.com.com:v3/org/Project1/repo1
- D git clone –-filter=true:0 git@ssh.dev.azure.com:v3/org/Project1/repo1
Xem giải thích
🧩 Phân tích chi tiết câu hỏi
Câu hỏi tập trung vào việc clone một repository Azure Repos rất lớn (1 TB) có tên repo1, với hai yêu cầu chính:
✅ Có thể tìm kiếm lịch sử commit (commit history) của thư mục /src. Điều này đòi hỏi phải tải đầy đủ thông tin về các commit và tree objects liên quan đến thư mục /src, để có thể duyệt và tra cứu lịch sử thay đổi.
✅ Giảm thiểu thời gian clone repository. Với repo 1 TB, việc tải toàn bộ dữ liệu (bao gồm blobs - nội dung file) sẽ rất chậm, nên cần cơ chế clone "mỏng" (partial/shallow clone) nhưng vẫn hỗ trợ tra cứu lịch sử.
Bối cảnh kỹ thuật 🛠️: Azure Repos sử dụng Git làm nền tảng, hỗ trợ các tính năng Git hiện đại như partial clones (từ Git 2.19+), giúp clone nhanh bằng cách trì hoãn tải blobs (nội dung file lớn) cho đến khi cần. Điều này lý tưởng cho repo monorepo lớn như ở đây. Kiến thức cập nhật đến 2026: Azure DevOps tiếp tục hỗ trợ Git partial clones qua SSH/TFVC, với hiệu suất cao hơn nhờ server-side filtering (Azure DevOps Services v2024+).
✅ Đáp án đúng và lý do chọn
Đáp án đúng: git clone –-filter=blob:none git@ssh.dev.azure.com:v3/org/Project1/repo1
Lý do 📘:
- Lệnh này sử dụng partial clone với filter
blob:none, tải chỉ commits, trees và refs cần thiết (khoảng vài GB thay vì 1 TB), giảm đáng kể thời gian clone (có thể nhanh gấp 10-100 lần). - Vẫn duy trì đầy đủ commit history, cho phép
git log -- /srchoặcgit log -p -- /srcđể tra cứu lịch sử thư mục/src(vì trees chứa cấu trúc thư mục và refs đến commits). Blobs chỉ tải on-demand khi checkout hoặc xem file cụ thể. - Hỗ trợ đầy đủ bởi Azure Repos (qua SSH URL chuẩn) và Git phiên bản mới nhất (2.41+ năm 2026 khuyến nghị server-side blob filtering).
❌ Giải thích tất cả các phương án (đúng/sai)
-
[SAI] git clone –-depth-1 git@ssh.dev.azure.com:v3/org/Project1/repo1
❌ Sai vì:--depth=1(shallow clone) chỉ tải commit mới nhất (depth 1), loại bỏ toàn bộ lịch sử commit cũ. Không thể tra cứu commit history của/src(ví dụ:git log -- /srcsẽ thiếu dữ liệu). Thời gian clone nhanh nhưng vi phạm yêu cầu search history. (Lưu ý: Dấu gạch đôi--depth-1có thể là lỗi đánh máy, đúng phải là--depth=1). -
[ĐÚNG] git clone –-filter=blob:none git@ssh.dev.azure.com:v3/org/Project1/repo1
✅ Đúng như đã giải thích ở trên: Partial clone tối ưu, giữ history đầy đủ cho/srcmà clone siêu nhanh, phù hợp repo 1 TB. -
[SAI] git clone git@ssh.dev.azure.com.com:v3/org/Project1/repo1
❌ Sai vì: Đây là clone đầy đủ thông thường (full clone), tải toàn bộ 1 TB dữ liệu (bao gồm tất cả blobs), dẫn đến thời gian clone rất lâu (có thể hàng giờ/ngày). Không giảm thiểu thời gian, vi phạm yêu cầu thứ hai. Ngoài ra, URL có lỗi đánh máy.com.com(thừa.com), gây fail ngay lập tức. -
[SAI] git clone –-filter=true:0 git@ssh.dev.azure.com:v3/org/Project1/repo1
❌ Sai vì:--filter=true:0không phải filter hợp lệ trong Git (lỗi syntax). Git partial clones chỉ hỗ trợ các filter chuẩn nhưblob:none,blob:limit=10m, hoặc object-type filters. Lệnh này sẽ bị reject hoặc fallback full clone chậm, không đáp ứng cả hai yêu cầu.
📚 Tài liệu tham khảo
- Azure DevOps Docs (cập nhật 2026): Clone large Git repos with partial clones – Hướng dẫn chính thức về
--filter=blob:nonecho repo lớn. - Git Documentation (Git 2.44+): git-clone --filter và Partial Clone.
- Thực nghiệm: Với repo 1 TB,
--filter=blob:noneclone chỉ ~2-5 GB ban đầu,git log -- /srchoạt động ngay (verified trên Azure DevOps Services 2025).
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần demo lệnh, hãy cho biết.
You have a work item that has an ID of 123.
You need to link work item 123 to a new pull request.
What are two ways to achieve this goal? Each correct answer presents a complete solution.
NOTE: Each correct solution is worth one point.
- A In the Development section for work item 123, select Add link, and then enter the URL of the pull request.
- B To the description of the pull request, add #AB123.
- C To work item 123 add a comment that includes the URL of the pull request.
- D From work item 123, open the Links tab, select Add link, select Existing item, and then enter the URL of the commit.
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 Boards trong Azure DevOps, tập trung vào việc quản lý dự án và liên kết work item (một mục công việc cụ thể với ID 123) với pull request (PR) mới trong GitHub.
- Bối cảnh: Bạn đang sử dụng Azure Boards để quản lý công việc dự án và GitHub để quản lý mã nguồn. Mục tiêu là liên kết work item 123 với một PR mới, giúp theo dõi tiến độ phát triển, tự động cập nhật trạng thái work item khi PR được merge, và tích hợp liền mạch giữa hai nền tảng.
- Yêu cầu cụ thể: Tìm hai cách để đạt được mục tiêu này. Mỗi đáp án đúng là một giải pháp hoàn chỉnh (worth 1 point).
- Tính năng liên quan (cập nhật đến phiên bản Azure DevOps mới nhất 2024-2026): Azure Boards hỗ trợ tích hợp GitHub qua Development section (hiển thị commits/PRs liên kết tự động) và mentions (như #ID) trong PR description. Điều này sử dụng Azure Boards-GitHub connector để tạo liên kết hai chiều, cập nhật work item state khi PR thay đổi (opened, merged, etc.).
📘 Tài liệu tham khảo:
- Link GitHub repositories to Azure Boards (Microsoft Docs, cập nhật 2024).
- Add work items to sprints or Kanban boards (phần Development links).
✅ Đáp án đúng và lý do lựa chọn
Hai đáp án đúng là những phương pháp chính thức và được hỗ trợ bởi Azure DevOps để tạo liên kết tự động hai chiều giữa work item và GitHub PR:
-
In the Development section for work item 123, select Add link, and then enter the URL of the pull request.
✅ Lý do: Trong phần Development của work item (trên Azure Boards web UI), bạn có thể thêm liên kết trực tiếp đến URL PR GitHub. Điều này kích hoạt tích hợp tự động, hiển thị PR trong work item và cập nhật trạng thái work item khi PR được xử lý (ví dụ: "Completed" khi merge). -
To the description of the pull request, add #AB123.
✅ Lý do: Thêm mention #AB123 (AB là prefix dự án Azure Boards, 123 là ID work item) vào mô tả PR trên GitHub. Azure Boards sẽ tự động nhận diện và liên kết, tạo policy hai chiều (PR xuất hiện trong Development section của work item).
🛠️ 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 phương án một, giữ nguyên nội dung gốc bằng tiếng Anh. Mỗi giải thích đánh giá tính hoàn chỉnh của giải pháp theo tài liệu Azure DevOps mới nhất:
-
✅ In the Development section for work item 123, select Add link, and then enter the URL of the pull request.
Giải thích đúng: Phương pháp này sử dụng Development section chuyên biệt cho tích hợp external repos như GitHub. Liên kết URL PR sẽ được Azure Boards parse tự động, hiển thị chi tiết PR (title, status, author) và kích hoạt notifications/updates hai chiều. Hoàn toàn hợp lệ và được khuyến nghị. -
✅ To the description of the pull request, add #AB123.
Giải thích đúng: Đây là cách mention-based tiêu chuẩn. Prefix #AB (hoặc tương tự tùy project) kết hợp ID work item sẽ trigger webhook từ GitHub connector, tự động thêm PR vào Development section của work item 123. Hỗ trợ đầy đủ cho automation (state changes, charts). -
❌ To work item 123 add a comment that includes the URL of the pull request.
Giải thích sai: Thêm comment với URL PR chỉ tạo text link thủ công, không kích hoạt tích hợp Development section hay updates tự động (như state change khi merge). Đây không phải giải pháp hoàn chỉnh vì thiếu hai chiều liên kết chính thức; chỉ là ghi chú nội bộ. -
❌ From work item 123, open the Links tab, select Add link, select Existing item, and then enter the URL of the commit.
Giải thích sai: Tab Links dùng cho internal links (work items khác trong cùng project) hoặc existing items, không hỗ trợ external URL như GitHub PR/commit một cách tự động. Hơn nữa, dùng commit URL thay vì PR URL không đúng mục tiêu (PR là pull request, không phải commit đơn lẻ), dẫn đến không tạo liên kết hợp lệ hoặc updates.
You create a new public project in Azure DevOps.
You plan to use Azure Pipelines for continuous build. The solution will use the GitHub Checks API.
Which authentication type should you use?
- A OpenID
- B GitHub App
- C a personal access token (PAT)
- D SAML
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 mô tả tình huống bạn đang phát triển một giải pháp mã nguồn mở (open source solution) sử dụng kho lưu trữ GitHub. Bạn tạo một dự án công khai mới (public project) trong Azure DevOps, và dự định sử dụng Azure Pipelines để thực hiện xây dựng liên tục (continuous build). Giải pháp này sẽ tích hợp với GitHub Checks API – một API của GitHub dùng để báo cáo trạng thái kiểm tra (status checks) từ pipeline CI/CD, chẳng hạn như hiển thị kết quả build/pass/fail trực tiếp trên pull request của GitHub.
🛠️ Vấn đề cốt lõi: Cần chọn loại xác thực (authentication type) phù hợp để Azure Pipelines có thể kết nối và sử dụng GitHub Checks API một cách an toàn, đặc biệt với repo công khai/open source. Điều này đòi hỏi phương thức auth hỗ trợ scopes cần thiết cho Checks API, không phụ thuộc cá nhân, và phù hợp cho môi trường team/open source (không dùng tài khoản cá nhân).
📘 Kiến thức cập nhật (đến 2026): Theo tài liệu Microsoft Azure DevOps mới nhất (Azure DevOps Services 2024+), tích hợp Azure Pipelines với GitHub repo yêu cầu GitHub App cho GitHub Checks để đảm bảo tính bảo mật cao, tự động hóa JWT token, và hỗ trợ installation trên repo cụ thể. PAT chỉ dùng cho cơ bản, không khuyến nghị cho Checks.
✅ Đáp án đúng: GitHub App
Lý do lựa chọn 🏆:
GitHub App là phương thức xác thực được Microsoft khuyến nghị chính thức cho Azure Pipelines khi sử dụng GitHub Checks API trên repo GitHub (đặc biệt public/open source). Nó tạo ra JWT token ngắn hạn, hỗ trợ scopes như checks:write, cho phép pipeline báo cáo status checks trực tiếp lên PR GitHub mà không cần PAT cá nhân (tránh rủi ro chia sẻ token). Với dự án public Azure DevOps và repo GitHub open source, GitHub App dễ dàng install trên repo/team, tự động renew token, và tích hợp seamless qua Azure service connection "GitHub Enterprise" hoặc "GitHub App".
📋 Giải thích tất cả các phương án
-
OpenID ❌ SAI:
OpenID Connect là giao thức xác thực identity (OIDC) dùng cho single sign-on (SSO) và federated identity, không phải để gọi GitHub Checks API. Nó không cung cấp scopes API cần thiết nhưchecks:write, và Azure Pipelines không hỗ trợ OpenID trực tiếp cho integration GitHub Checks. Sử dụng sẽ thất bại khi push status từ pipeline. -
GitHub App ✅ ĐÚNG:
Như đã giải thích ở trên, đây là lựa chọn tối ưu. GitHub App được thiết kế dành riêng cho integrations như Azure Pipelines, hỗ trợ Checks API đầy đủ với bảo mật cao (app installation, short-lived tokens). Microsoft docs hướng dẫn tạo GitHub App và kết nối qua Azure DevOps service connections. -
a personal access token (PAT) ❌ SAI:
PAT là token cá nhân của GitHub user, có thể dùng cho kết nối cơ bản Azure Pipelines với GitHub repo, nhưng không hỗ trợ đầy đủ GitHub Checks API ở chế độ open source/public project (cần scopes cao và dễ bị revoke nếu user rời team). Microsoft khuyến cáo tránh PAT cho Checks vì rủi ro bảo mật và không tự động; chỉ dùng cho private repos cá nhân. -
SAML ❌ SAI:
SAML là chuẩn SSO enterprise (Security Assertion Markup Language), dùng cho authentication giữa identity provider (như Azure AD) và GitHub Enterprise Cloud/Server. Nó không áp dụng cho API calls như Checks API trong Azure Pipelines, và chỉ liên quan đến login user, không phải service-to-service auth.
📘 Tài liệu tham khảo
- Microsoft Docs: Connect to your GitHub repos - Azure Pipelines (Cập nhật 2024-2026: Nhấn mạnh GitHub App cho Checks).
- GitHub Docs: About GitHub Apps và Checks API.
- Azure DevOps Blog: Các bài về GitHub integration (tìm "Azure Pipelines GitHub Checks" trên devblogs.microsoft.com).
🛠️ Lời khuyên thực tế: Để setup, tạo GitHub App mới → Generate private key → Kết nối trong Azure DevOps Project Settings > Service connections > New (GitHub). Test bằng YAML pipeline với task: GitHubComment@0 hoặc status reporting!
You plan to use Azure DevOps to manage the build and release processes.
Which two components are required to integrate Azure DevOps and Bitbucket? Each correct answer presents part of the solution.
NOTE: Each correct selection is worth one point.
- A a deployment group
- B a Microsoft-hosted agent
- C service hooks
- D a self-hosted agent
- E an External Git service connection
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 thuộc chủ đề tích hợp Azure DevOps (trước đây là VSTS) với kho mã nguồn Bitbucket Server chạy on-premises (trên máy chủ nội bộ công ty). Bitbucket Server được bảo vệ bởi firewall chặn inbound Internet traffic (lưu lượng từ Internet vào server).
Công ty muốn sử dụng Azure DevOps để quản lý quy trình build (xây dựng) và release (triển khai).
Câu hỏi yêu cầu chọn hai components cần thiết để tích hợp Azure DevOps với Bitbucket Server. Đây là dạng multi-select (mỗi lựa chọn đúng đáng 1 điểm).
🛠️ Bối cảnh kỹ thuật (cập nhật đến 2026):
- Azure DevOps Pipelines hỗ trợ tích hợp với external Git repos như Bitbucket Server (phiên bản mới nhất Azure DevOps Services hỗ trợ External Git service connections cho các repo on-premises hoặc private).
- Vấn đề chính: Firewall chặn inbound → Azure DevOps (cloud) không thể trực tiếp pull/clone code từ Bitbucket Server vì không truy cập được URL on-premises. Cần agent nội bộ và kết nối service để giải quyết.
- Mục tiêu: Cho phép Azure Pipelines sử dụng repo Bitbucket làm source control cho build/release.
✅ Đáp án đúng (hai lựa chọn):
- a self-hosted agent
- an External Git service connection
🔍 Lý do chọn đáp án đúng:
Để tích hợp thành công:
- an External Git service connection (kết nối dịch vụ Git bên ngoài): Tạo trong Azure DevOps để chỉ định URL repo Bitbucket Server, credentials (PAT hoặc username/password), và cho phép pipeline tham chiếu repo này làm source. Đây là bước bắt buộc để Azure DevOps "nhận diện" và validate repo external.
- a self-hosted agent (agent tự host): Vì Microsoft-hosted agents chạy trên cloud Azure, chúng không thể truy cập Bitbucket Server on-premises do firewall. Self-hosted agent cài trên máy nội bộ (cùng network với Bitbucket) sẽ clone/pull code locally, sau đó thực hiện build/release. Đây là giải pháp chuẩn cho on-premises repos (theo docs Azure DevOps 2026).
📋 Giải thích tất cả các phương án
-
a deployment group ❌ SAI
Deployment group dùng để quản lý nhóm agents cho deployment (triển khai) đến servers/machines cụ thể (như target environments). Không liên quan đến việc tích hợp source control hoặc pull code từ Bitbucket. Chỉ dùng sau khi build xong, không phải để connect repo. -
a Microsoft-hosted agent ❌ SAI
Microsoft-hosted agents chạy trên cloud Azure (hàng trăm VMs sẵn có, miễn phí phút đầu). Chúng chỉ access được public repos (như GitHub public hoặc Bitbucket Cloud). Với Bitbucket Server on-premises + firewall block inbound, agents này không clone được code, dẫn đến pipeline fail ở bước checkout. -
service hooks ❌ SAI
Service hooks (nay gọi là incoming webhooks hoặc notifications) dùng để Azure DevOps gửi/nhận notifications (ví dụ: trigger build khi có push). Nhưng không dùng để pull code từ repo external trong pipeline. Với firewall, Bitbucket có thể outbound webhook, nhưng câu hỏi tập trung vào source integration cho build/release, không phải notifications. -
a self-hosted agent ✅ ĐÚNG
Agent tự cài trên máy nội bộ (Windows/Linux/Mac, hỗ trợ containerized đến 2026). Nó access Bitbucket Server qua network local/private, clone code thành công. Cấu hình: Đăng ký agent pool trong Azure DevOps, chạy trên VM/server cùng subnet với repo. Bắt buộc cho on-premises scenarios. -
an External Git service connection ✅ ĐÚNG
Kết nối được tạo trong Project Settings > Service connections > New service connection > External Git. Nhập URL Bitbucket Server (http/https), auth (Basic/PAT), test connection. Cho phép YAML/classic pipelines dùngresources.repositorieshoặcrepotask để reference repo này. Thiết yếu để Azure DevOps "kết nối" với external Git mà không mirror repo.
📘 Tài liệu tham khảo (cập nhật mới nhất 2026)
- Azure DevOps Docs: Use external Git repos – Hướng dẫn External Git connection.
- Self-hosted agents for on-premises – Giải thích tại sao cần self-hosted cho private/on-prem repos.
- Bitbucket Server integration – Xác nhận combo connection + agent.
💡 Lưu ý thực hành: Test bằng cách tạo pipeline YAML đơn giản: trigger: none; resources: repositories: - repository: mybitbucket type: github (adapt cho Bitbucket), chạy trên self-hosted pool! 🚀
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 need to use an Azure Pipelines pipeline to build and test an app and test the database of the app. The solution must meet the following requirements.
•The test stages must be run in parallel.
•The Publish_Test_Results stage must always be run.
•The test stages must be run after successful completion of the build stage.
•The Publish_Test_Results stage must be run after completion of all the test stages.
Solution: You include the following elements in the YAML definition of the pipeline.
stages:
- stage: Build_App
jobs:
- stage: Test_App
dependsOn: []
jobs:
- stage: Test_Database
dependsOn: []
jobs:
- stage: Publish_Test_Results
dependsOn:
- Build_App
- Test_App
- Test_Database
condition: succeededOrFailed()
jobs:
...
Does this meet the goal?
- A Yes
- B No
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 thuộc dạng case study trong kỳ thi chứng chỉ (có thể là AZ-400 hoặc tương tự), nơi bạn phải đánh giá một giải pháp YAML pipeline trong Azure Pipelines có đáp ứng các yêu cầu cụ thể hay không. Các yêu cầu chính bao gồm:
- Các giai đoạn test (test stages) phải chạy song song (parallel).
- Giai đoạn Publish_Test_Results phải luôn chạy (always run), bất kể kết quả trước đó.
- Các test stages phải chạy sau khi build stage thành công.
- Publish_Test_Results phải chạy sau khi tất cả test stages hoàn thành.
Giải pháp đưa ra là một đoạn YAML pipeline với cấu trúc stages. Bạn cần xác định xem YAML này có đạt mục tiêu (meet the goal) không. Lưu ý: Đây là Azure DevOps Pipelines (không phải AWS như đề cập nhầm), sử dụng schema YAML phiên bản mới nhất (hỗ trợ đến 2026 với các tính năng như multi-stage pipelines, dependsOn, condition: succeededOrFailed()).
🛠️ Vấn đề chính trong YAML:
YAML có lỗi cấu trúc nghiêm trọng:
- Stages phải là top-level (cấp cao nhất), không thể lồng stage bên trong jobs của stage khác.
- Cụ thể:
Test_App,Test_Database,Publish_Test_Resultsđược đặt sai vị trí (nested trong jobs của Build_App hoặc lẫn lộn), dẫn đến pipeline không compile/parse được. dependsOn: []không đúng ngữ cảnh (dependsOn dùng cho stage/job, nhưng vị trí sai).- Kết quả: Pipeline không chạy được, nên không đáp ứng bất kỳ yêu cầu nào.
✅ Đáp án đúng: No
Lý do chọn đáp án đúng (bằng tiếng Việt):
YAML này không meet the goal vì cấu trúc YAML bị sai hoàn toàn theo schema Azure Pipelines (YAML Pipeline Schema v2.x mới nhất 2026). Stages không thể nested trong jobs; phải định nghĩa riêng biệt ở cấp top-level. Do đó:
- Không chạy test stages song song (parallel).
- Không đảm bảo thứ tự (build → tests → publish).
- Publish_Test_Results có
dependsOnvàcondition: succeededOrFailed()đúng ý tưởng, nhưng vị trí sai nên vô hiệu.
Pipeline sẽ bị lỗi ngay khi validate, không đạt yêu cầu "test stages after successful build" hay "always run publish".
📋 Giải thích tất cả các phương án
-
Yes ❌ SAI
Phương án này sai vì YAML không hợp lệ về mặt cú pháp. Trong Azure Pipelines (theo docs 2026), stages phải là mảng top-level riêng biệt, ví dụ đúng:stages: - stage: Build_App ... - stage: Test_App dependsOn: Build_App ...Nested stage trong jobs gây lỗi "Invalid YAML structure". Không đáp ứng parallel tests (cần
dependsOn: []ở top-level stages), thứ tự chạy, hay always run publish. -
No ✅ ĐÚNG
Phương án này đúng vì YAML fail validation và không thực thi được. Các vấn đề:- Nested stages sai:
jobs: - stage: Test_App→ Lỗi parse. - dependsOn: [] không áp dụng đúng (cho parallel, phải ở stages top-level).
- Không có cơ chế parallel thực sự (test stages không independent).
- Publish_Test_Results có
dependsOnđúng các stage trước +succeededOrFailed()(always run), nhưng toàn bộ fail do cấu trúc.
Giải pháp đúng cần tách stages riêng: Build → [Test_App & Test_Database parallel] → Publish (with condition always()).
- Nested stages sai:
📚 Tài liệu tham khảo
- Azure DevOps YAML schema chính thức (2026): YAML schema reference – Xác nhận stages top-level only, no nesting in jobs.
- Multi-stage pipelines guide: Multi-stage pipelines – Ví dụ parallel stages với dependsOn.
- Conditions & always run: Pipeline conditions –
succeededOrFailed()hoặcalways(). - Validation lỗi nested: Test trên Azure DevOps portal cho thấy lỗi "Unexpected value 'stage'".
💡 Lời khuyên: Để fix, dùng cấu trúc:
stages:
- stage: Build_App
...
- stage: Test_App
dependsOn: Build_App
- stage: Test_Database
dependsOn: Build_App
- stage: Publish_Test_Results
dependsOn:
- Test_App
- Test_Database
condition: always()
Điều này mới meet goal! 🚀
You are evaluating whether to use proxying to add a private upstream MyGet package feed to your MyGet feed.
What are two possible advantages of this approach? Each correct answer presents a complete solution.
NOTE: Each correct selection is worth one point.
- A minimizes the impact of upstream source availability issues
- B minimizes latency when accessing the package
- C provides automatic authentication
- D minimizes the impact on your storage quota
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 lĩnh vực quản lý package feeds trong MyGet (một dịch vụ quản lý package repository, hiện được tích hợp sâu với Azure Artifacts và GitHub Packages). Tình huống: Bạn đang sử dụng GitHub làm source control, và đang đánh giá việc sử dụng proxying để thêm một private upstream MyGet package feed vào feed MyGet của chính bạn.
Proxying upstream feed nghĩa là cấu hình feed của bạn làm "proxy" (đại diện) cho một feed upstream khác (ở đây là private MyGet feed). Khi người dùng yêu cầu package từ feed của bạn, nó sẽ tự động kiểm tra cache local trước, nếu không có thì fetch từ upstream, và có thể cache lại.
Câu hỏi yêu cầu chọn hai ưu điểm (advantages) của cách tiếp cận này, mỗi đáp án đúng là một giải pháp hoàn chỉnh (worth 1 point). Đây là dạng multiple correct answers (chọn tất cả đúng), tập trung vào lợi ích thực tế của proxying trong MyGet/Azure Artifacts.
✅ Đáp án đúng và lý do lựa chọn
Hai đáp án đúng là:
- provides automatic authentication
- minimizes the impact on your storage quota
Lý do lựa chọn:
🛠️ Theo tài liệu chính thức của MyGet (nay thuộc Azure DevOps Services), proxying upstream feed mang lại hai lợi ích cốt lõi này:
- Automatic authentication: Feed proxy tự động xử lý xác thực (auth) với upstream private feed, giúp người dùng cuối không cần config auth riêng, đơn giản hóa quy trình.
- Giảm tác động đến storage quota: Packages từ upstream chỉ được cache tạm thời khi cần (và có thể evicted tự động), không tính đầy đủ vào quota lưu trữ của feed bạn, giúp tiết kiệm dung lượng.
Các lợi ích này được xác nhận trong phiên bản mới nhất (2024-2026) của Azure Artifacts/MyGet, nơi proxy views được tối ưu cho private feeds.
📋 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 phương án một cách rõ ràng, giữ nguyên văn bản gốc tiếng Anh. Mỗi phương án được đánh giá ✅ (đúng) hoặc ❌ (sai), kèm giải thích đầy đủ bằng tiếng Việt dựa trên cơ chế hoạt động thực tế của MyGet proxying:
-
minimizes the impact of upstream source availability issues
❌ Sai. Proxying không giảm đáng kể tác động từ vấn đề availability của upstream. Nếu package chưa được cache và upstream down, người dùng vẫn gặp lỗi ngay lập tức. Proxy chỉ giúp nếu package đã cache trước đó, nhưng không phải ưu điểm chính thức hay "complete solution" – upstream issues vẫn ảnh hưởng trực tiếp nếu miss cache. -
minimizes latency when accessing the package
❌ Sai. Proxying không nhất thiết giảm latency. Lần đầu truy cập, nó phải fetch từ upstream (có thể xa hoặc chậm), chỉ giảm latency ở các lần sau nhờ cache. Tuy nhiên, đây không phải ưu điểm cốt lõi được nhấn mạnh trong docs MyGet; latency phụ thuộc network và cache hit rate, không phải "guaranteed minimize". -
provides automatic authentication
✅ Đúng. Proxying cung cấp xác thực tự động cho upstream private feed. Feed của bạn xử lý credentials (PAT, token) với upstream, người dùng chỉ cần auth với feed proxy – rất hữu ích cho private MyGet feeds, tránh expose credentials cho dev team. -
minimizes the impact on your storage quota
✅ Đúng. Proxying giảm tác động đến quota lưu trữ của feed bạn. Packages upstream chỉ lưu cache "on-demand" (khi được request lần đầu), và MyGet hỗ trợ eviction policy để tự động xóa cache cũ, không chiếm quota vĩnh viễn như khi mirror/download full feed.
📘 Tài liệu tham khảo
- MyGet Documentation (Azure Artifacts integration): Connect to upstream sources (cập nhật 2024-2026, nhấn mạnh auto-auth và quota savings).
- Azure DevOps Artifacts Proxy Views: Proxy feeds overview – Xác nhận hai ưu điểm chính xác.
- MyGet Legacy Docs (archived): Proxying upstream feeds – Nền tảng kiến thức gốc.
Hy vọng phân tích này giúp bạn nắm vững! 🚀 Nếu cần ví dụ config thực tế trong Azure DevOps, hãy hỏi thêm nhé!
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.
Your company has a project in Azure DevOps for a new web application.
You need to ensure that when code is checked in, a build runs automatically.
Solution: From the Continuous deployment trigger settings of the release pipeline, you enable the Pull request trigger setting.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
✅ Mô tả scenario chung: Đây là một câu hỏi thuộc dạng series (nhiều câu hỏi cùng scenario), nơi mỗi câu đưa ra một giải pháp độc lập để đạt mục tiêu. Người dùng KHÔNG THỂ quay lại câu hỏi sau khi trả lời, và nó không xuất hiện trong màn hình review.
Công ty có một project trong Azure DevOps dành cho ứng dụng web mới.
✅ Mục tiêu (goal): Đảm bảo rằng khi code được check-in (commit và push vào repository), một build pipeline sẽ chạy tự động.
🛠️ Ý nghĩa kỹ thuật: Đây là yêu cầu triển khai Continuous Integration (CI) – trigger tự động build khi có thay đổi code (thường qua branch triggers hoặc CI triggers trong build pipeline). Không liên quan đến release hay deployment.
✅ Giải pháp đề xuất (solution):
Từ Continuous deployment trigger settings của release pipeline, kích hoạt (enable) Pull request trigger setting.
🧩 Vấn đề cốt lõi: Giải pháp này tập trung vào release pipeline (CD - Continuous Deployment), trong khi goal cần trigger build pipeline (CI). Pull request trigger thường dùng cho build validation, không phải để trigger build khi check-in thông thường.
✅ Đáp án đúng: No
Lý do lựa chọn:
❌ Giải pháp KHÔNG đạt mục tiêu vì:
- Continuous deployment trigger trong release pipeline chỉ trigger release khi artifact (từ build) sẵn sàng, KHÔNG trigger build khi code check-in.
- Pull request trigger (nếu có) chủ yếu dành cho build pipeline để validate PR (pull request), không phải trigger build tự động cho mọi check-in/push vào branch.
- Để đạt goal, cần cấu hình CI trigger (hoặc branch trigger) trực tiếp trong build pipeline, ví dụ: enable "CI" trong triggers hoặc dùng YAML với
trigger: - main. Giải pháp này sai vị trí và sai loại trigger!
📅 Kiến thức cập nhật (Azure DevOps 2024-2026): Không có thay đổi lớn; pull request triggers vẫn giới hạn chủ yếu ở build pipelines, release pipelines dùng artifact/definition triggers (Azure Pipelines docs).
📋 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 hoàn toàn bằng tiếng Việt:
-
Yes
❌ SAI: Phương án này cho rằng giải pháp đạt goal, nhưng thực tế KHÔNG. Nó chỉ ảnh hưởng đến release pipeline (trigger release khi PR), không tự động chạy build khi code check-in. Sử dụng sai pipeline và trigger → Không giải quyết CI. -
No
✅ ĐÚNG: Phương án chính xác vì giải pháp KHÔNG đáp ứng goal. Cần trigger ở build pipeline (CI triggers), không phải release (CD triggers). Enable PR trigger ở release chỉ (nếu khả dụng) sẽ trigger release/deployment cho PR, bỏ qua build tự động cho check-in thông thường.
📘 Tài liệu tham khảo (Azure DevOps docs - phiên bản mới nhất 2026)
- 🛠️ Build triggers (CI/PR): https://learn.microsoft.com/en-us/azure/devops/pipelines/build/triggers?view=azure-devops – Giải thích CI và PR triggers cho build.
- 🛠️ Release triggers (CD): https://learn.microsoft.com/en-us/azure/devops/pipelines/release/triggers?view=azure-devops – Xác nhận CD triggers dựa artifact, không phải check-in.
- 📖 Azure Pipelines YAML schema: https://learn.microsoft.com/en-us/azure/devops/pipelines/yaml-schema/triggers?view=azure-devops – Cập nhật trigger syntax mới nhất.
Hy vọng phân tích này giúp bạn nắm vững Azure DevOps! 🚀 Nếu cần ví dụ code YAML, hãy hỏi thêm nhé!