Topic 2 Question 27
7 mins read

Topic 2 Question 27


Phân tích câu hỏi

Bạn đang triển khai một trang web lên Azure Web App từ GitHub repository.
Trang web chứa nội dung tĩnh được tạo bởi một script.
Bạn muốn chạy script tạo nội dung tĩnh trước khi trang web bắt đầu phục vụ traffic.
Bạn đang sử dụng tính năng Azure Web App Continuous Deployment.

Mục tiêu:
Xác định hai phương án hợp lệ để chạy script tạo nội dung tĩnh trước khi trang web được phục vụ.


Phân tích các đáp án

A. Thêm đường dẫn của công cụ tạo nội dung tĩnh vào WEBSITE_RUN_FROM_PACKAGE trong host.json

  • ❌ Sai
  • WEBSITE_RUN_FROM_PACKAGE là một thiết lập cho phép ứng dụng chạy trực tiếp từ package nén (zip) thay vì thư mục wwwroot.
  • Thiết lập này không giúp chạy một script trước khi trang web bắt đầu phục vụ.

B. Thêm PreBuild target vào file csproj của website để chạy script tạo nội dung tĩnh

  • ✅ Đúng
  • Khi sử dụng MSBuild với .NET, bạn có thể thêm một PreBuild target vào file .csproj để chạy script trước khi ứng dụng được xây dựng và triển khai.
  • Điều này đảm bảo rằng nội dung tĩnh được tạo ra trước khi trang web bắt đầu phục vụ.

C. Tạo file run.cmd trong thư mục /run, file này gọi script tạo nội dung tĩnh và triển khai website

  • ✅ Đúng
  • Trong Azure Web App, nếu có file run.cmd, hệ thống sẽ tự động chạy file này trong quá trình khởi động.
  • Nếu run.cmd chứa lệnh để tạo nội dung tĩnh trước khi khởi động ứng dụng, thì nó sẽ đáp ứng được yêu cầu.

D. Tạo file .deployment ở gốc repository, file này gọi script để tạo nội dung tĩnh và triển khai website

  • ❌ Sai
  • File .deployment được dùng để xác định lệnh khởi động ứng dụng, nhưng không phải lúc nào cũng đảm bảo script chạy trước khi trang web bắt đầu phục vụ traffic.

Đáp án đúng:

B. Thêm PreBuild target vào file csproj
C. Tạo file run.cmd để chạy script trước khi khởi động ứng dụng

Giải thích:

  • PreBuild target (B) đảm bảo script chạy trước khi xây dựng và triển khai ứng dụng.
  • run.cmd (C) đảm bảo script chạy trước khi ứng dụng khởi động trên Azure Web App.

Hai phương án này cung cấp cách tiếp cận đáng tin cậy để đảm bảo nội dung tĩnh được tạo ra trước khi trang web phục vụ traffic.


Phân tích về lựa chọn D (.deployment file)

Lựa chọn D đề xuất tạo một file .deployment ở thư mục gốc của repository với nội dung như sau:

[config]
command = YOUR COMMAND TO RUN FOR DEPLOYMENT

Điều này có nghĩa là bạn có thể tùy chỉnh quy trình triển khai bằng cách chỉ định một lệnh cụ thể để chạy trong quá trình deploy.


Đánh giá lựa chọn D

✅ Đúng với điều kiện cụ thể

  • .deployment file là một cách hợp lệ để tùy chỉnh triển khai trong Azure App Service.
  • Nếu lệnh chỉ định trong .deployment chạy script tạo nội dung tĩnh trước khi khởi động ứng dụng, thì nó có thể đáp ứng yêu cầu của đề bài.

🚨 Rủi ro và nhược điểm

  • .deployment file không đảm bảo script sẽ chạy trước khi trang web bắt đầu phục vụ traffic trong mọi trường hợp.
  • Nếu lệnh chỉ định trong file .deployment chỉ chạy sau khi ứng dụng đã khởi động, nó có thể không phù hợp với yêu cầu của đề bài.
  • Tính ổn định của phương pháp này phụ thuộc vào cách cấu hình cụ thể trong file .deployment.

So sánh với lựa chọn C (run.cmd)

Tiêu chí.deployment file (D)run.cmd script (C)
Dễ thiết lậpDễ dàng tạo và thêm vào repoDễ dàng tạo file batch script
Khả năng chạy trước khi phục vụ trafficKhông đảm bảo 100%Đảm bảo chạy trước khi ứng dụng khởi động
Kiểm soát lệnh chạyCó thể tùy chỉnhHoàn toàn kiểm soát lệnh thực thi
Tính ổn địnhPhụ thuộc vào Kudu DeploymentHoạt động độc lập, đáng tin cậy hơn

Kết luận:

  • Lựa chọn C (run.cmd) là giải pháp tốt hơn vì nó đảm bảo script chạy trước khi ứng dụng phục vụ traffic.
  • Lựa chọn D có thể hoạt động nhưng không đảm bảo 100%, do đó không phải là lựa chọn tối ưu.

Kết luận cuối cùng

Hai lựa chọn đúng nhất:
B. Thêm PreBuild target vào file csproj để chạy script trước khi build và deploy
C. Tạo file run.cmd để chạy script trước khi ứng dụng khởi động

🚫 Loại bỏ lựa chọn D vì không đảm bảo 100% script chạy trước khi trang web phục vụ traffic.

Leave a Reply

Your email address will not be published. Required fields are marked *