Ngày phát hành (release day) là ngày dự kiến phát hành phiên bản mới của ứng dụng di động, bao gồm chuẩn bị bản dựng, đánh giá cửa hàng, triển khai theo giai đoạn (staged rollout) và giám sát. Đối với ứng dụng iOS, quy trình bắt đầu bằng việc tải bản dựng lên App Store Connect trước 24-48 giờ so với ngày phát hành dự kiến do yêu cầu đánh giá bắt buộc của Apple. Đối với Android, bản dựng được tổng hợp và tải lên Google Play Console, nơi quy trình đánh giá thường mất 1-4 giờ. Theo Apple Developer Guidelines (2025), 90% bản dựng vượt qua đánh giá trong vòng 24 giờ. Triển khai theo giai đoạn giúp giảm thiểu tác động nếu phát hiện lỗi sau khi xuất bản.
Những điểm chính
Ngày phát hành không chỉ là khoảnh khắc nhấn nút Xuất bản. Đó là một quy trình phối hợp có sự tham gia của các nhà phát triển, QA, DevOps, quản lý sản phẩm và đôi khi là bộ phận hỗ trợ. Việc chuẩn bị bắt đầu từ 2-3 tuần trước ngày phát hành: thống nhất phạm vi, đóng băng mã, kiểm thử hồi quy, chuẩn bị ghi chú phát hành và tài liệu tiếp thị. Chuẩn bị càng kỹ lưỡng, ngày phát hành càng diễn ra suôn sẻ.
Danh sách kiểm tra chuẩn bị cho ngày phát hành bao gồm: chạy QA cuối cùng (bộ kiểm thử hồi quy + khói) trên bản dựng phát hành; kiểm tra siêu dữ liệu trong cửa hàng (tên, mô tả, ảnh chụp màn hình, từ khóa); thống nhất tỷ lệ triển khai theo giai đoạn với quản lý sản phẩm; chuẩn bị kế hoạch rollback (thẻ nào cần triển khai lại, mất bao lâu); thông báo cho nhóm và các dịch vụ liên quan về bản phát hành sắp tới. Danh sách kiểm tra phát hành nên được tự động hóa qua CI/CD — ví dụ, dưới dạng quy trình GitHub Actions kiểm tra tất cả các mục trước khi tạo thẻ phát hành.
Một yếu tố quan trọng của việc chuẩn bị là thời gian chết (blackout period) — khoảng thời gian cấm triển khai lên môi trường sản xuất. Thông thường, thời gian chết được áp dụng 48 giờ trước ngày phát hành và được dỡ bỏ 24 giờ sau khi triển khai 100% thành công. Đóng băng thay đổi trong thời gian chết áp dụng cho tất cả các dịch vụ liên quan đến bản phát hành.
24-48 giờ trước ngày phát hành, quá trình đóng băng mã (code freeze) được áp dụng — dừng hoàn toàn các thay đổi mã. Các nhà phát triển chuyển sang chuẩn bị tài liệu và ghi chú phát hành. DevOps tổng hợp bản dựng phát hành từ một thẻ cố định (ví dụ: v2.6.0-rc1). Bản dựng trải qua bộ kiểm thử hồi quy đầy đủ (tự động + thủ công). Nếu tìm thấy lỗi nghiêm trọng, chúng sẽ được sửa trước khi đóng băng mã hoặc bản phát hành bị hoãn lại. Ứng viên phát hành (RC) — bản dựng đã vượt qua QA và sẵn sàng gửi lên cửa hàng.
Gắn thẻ trong Git: một thẻ chú thích được tạo (git tag -a v2.6.0 -m “Release v2.6.0”). Đường ống CI/CD xây dựng AAB (Gói ứng dụng Android) cho Google Play và IPA (Gói ứng dụng iOS) cho Apple App Store. Bản dựng đi kèm với: tệp tổng kiểm tra (SHA256), nhật ký thay đổi và danh sách các vấn đề đã biết. Bản dựng tái tạo được — một phương pháp lý tưởng khi xây dựng lại từ cùng một thẻ cho kết quả nhị phân giống hệt nhau.
# Đường ống phát hành — tạo thẻ và xây dựng
# Giả định đã đóng băng mã
# Tạo nhánh phát hành từ develop
git checkout develop
git pull origin develop
git checkout -b release/v2.6.0
git push origin release/v2.6.0
# Đóng băng mã: quy tắc bảo vệ nhánh chặn PR mới
# Chạy bộ kiểm thử hồi quy trong CI/CD
./gradlew clean testReleaseUnitTest connectedReleaseTest
# Tạo thẻ phát hành sau QA thành công
git tag -a v2.6.0 -m "Release v2.6.0: payment module, dark mode"
git push origin v2.6.0
# Xây dựng tệp nhị phân phát hành qua CI/CD
# fastlane build_release tạo AAB + universal APK
fastlane build_release
Quan trọng: việc tăng phiên bản (cập nhật version code và version name) được thực hiện trước khi đóng băng mã. Sau khi đóng băng mã, phiên bản không thay đổi. Đối với Android: versionCode — số nguyên tăng đơn điệu; versionName — phiên bản ngữ nghĩa (2.6.0). Đối với iOS: CFBundleVersion (số bản dựng) và CFBundleShortVersionString (phiên bản ngữ nghĩa). Quản lý phiên bản nên được tự động hóa trong gradle/xcconfig.
Đối với iOS: bản dựng được tải lên qua Xcode, Transporter hoặc fastlane lên App Store Connect. Sau khi tải lên, bản dựng trải qua quá trình kiểm tra tự động của Apple (processing), sau đó được gửi đi đánh giá thủ công. Thời gian đánh giá trung bình là 24 giờ, nhưng có thể thay đổi từ 1 giờ đến 7 ngày tùy thuộc vào khối lượng công việc của người đánh giá Apple và các yêu cầu tuân thủ. Đánh giá nhanh — yêu cầu đánh giá tăng tốc cho các bản sửa lỗi nghiêm trọng (tối đa một lần mỗi tháng, không được đảm bảo).
Đối với Android: bản dựng được tải lên qua Google Play Console. Google sử dụng cách tiếp cận kết hợp: kiểm thử tự động (khả năng truy cập, phần mềm độc hại, tuân thủ chính sách) + đánh giá thủ công có chọn lọc. Thời gian đánh giá trung bình là 1-4 giờ. Luồng kiểm thử nội bộ và Luồng đóng cho phép kiểm thử cuối cùng trước khi xuất bản lên Luồng sản xuất. Khuyến nghị: 1-2 ngày trong Kiểm thử nội bộ → 1 ngày trong Beta đóng → triển khai dần dần lên Sản xuất.
Đối với cả hai nền tảng, việc kiểm tra siêu dữ liệu trước khi tải bản dựng lên là rất quan trọng: tên ứng dụng, mô tả (ngắn + đầy đủ), ảnh chụp màn hình cho từng thiết bị được hỗ trợ (iPhone 6,5″, 5,5″, iPad, điện thoại Android, máy tính bảng), từ khóa (iOS) hoặc thử nghiệm danh sách cửa hàng (Android). Lỗi siêu dữ liệu có thể làm chậm quá trình đánh giá thêm một ngày. Siêu dữ liệu ứng dụng nên được bản địa hóa cho tất cả các ngôn ngữ được hỗ trợ.
Triển khai theo giai đoạn (triển khai dần dần, triển khai từng bước) là một chiến lược trong đó phiên bản mới có sẵn cho người dùng dần dần, không phải cùng một lúc. Một sơ đồ điển hình cho nhóm trưởng thành: 1% người dùng (2-4 giờ đầu) → 10% (24 giờ) → 25% (24 giờ) → 50% (24 giờ) → 100%. Mỗi giai đoạn bao gồm giám sát số liệu và kiểm tra không có lỗi nghiêm trọng. Triển khai theo giai đoạn là công cụ chính để giảm thiểu rủi ro trong quá trình phát hành.
Google Play Console cung cấp tính năng triển khai theo giai đoạn tích hợp: bạn có thể chỉ định tỷ lệ người dùng và lên lịch tăng dần. Đối với iOS App Store Connect, không có tính năng tích hợp sẵn như vậy — triển khai theo giai đoạn được thực hiện thông qua Phát hành theo giai đoạn (tăng phạm vi tự động trong 7 ngày với khả năng tạm dừng) hoặc thông qua cờ tính năng phía máy chủ với phân phối địa lý. Phát hành theo giai đoạn trong App Store Connect cho phép tạm dừng phát hành nếu phát hiện sự cố.
Các số liệu chính để chuyển sang giai đoạn tiếp theo: tỷ lệ không bị treo (≥99,9% cho bản phát hành mới), tỷ lệ ANR (Android, ≤0,1%), tỷ lệ lỗi trên API backend (≤0,5% 5xx), đánh giá người dùng (không thấp hơn phiên bản trước), điểm apdex (≥0,94). Nếu bất kỳ số liệu nào vượt quá ngưỡng, quá trình triển khai sẽ bị tạm dừng cho đến khi xác định được nguyên nhân. Cổng go/no-go ở mỗi giai đoạn là trách nhiệm của người quản lý phát hành hoặc kỹ sư trực.
4 giờ đầu tiên sau khi phát hành là thời điểm quan trọng nhất. Nhóm theo dõi tỷ lệ treo (Sentry, Firebase Crashlytics, App Center), tỷ lệ lỗi 5xx trên backend, sự kiện tùy chỉnh (thanh toán thành công, đăng nhập, đăng ký), đánh giá người dùng trên App Store và Google Play, và đề cập trên mạng xã hội (Twitter, Reddit). Bảng điều khiển giám sát nên được chuẩn bị trước và có sẵn trên màn hình lớn tại văn phòng hoặc trong kênh Slack chuyên dụng. Bảng điều khiển phát hành — một cửa sổ duy nhất cho tất cả các số liệu phát hành.
Đặc biệt chú ý đến các số liệu hồi quy: so sánh tỷ lệ treo với phiên bản trước trong cùng khoảng thời gian. Nếu tỷ lệ treo tăng hơn 0,1%, đó là dấu hiệu cảnh báo cần phân tích ngay lập tức. Cũng cần so sánh độ trễ trung vị và p95 của các điểm cuối API chính: ngay cả khi không có treo, thời gian phản hồi tăng 200ms có thể báo hiệu sự cố. So sánh số liệu (đường cơ sở so với hiện tại) được tự động hóa trong Datadog hoặc Grafana.
Phản hồi của người dùng cũng quan trọng không kém các số liệu định lượng. Trong những giờ đầu sau khi phát hành, người dùng tích cực để lại đánh giá trên các cửa hàng và viết cho bộ phận hỗ trợ. Các lỗi không bị phát hiện bởi kiểm thử nhanh chóng xuất hiện trong các đánh giá. Trưởng nhóm hoặc kỹ sư QA được chỉ định theo dõi đánh giá mỗi 30 phút trong 4 giờ đầu và phân loại chúng: dương tính giả, vấn đề đã biết (đã có trong danh sách vấn đề đã biết), lỗi mới. Lỗi mới P0/P1 — yếu tố kích hoạt tạm dừng triển khai.
Rollback là việc quay trở lại phiên bản ổn định trước đó khi phát hiện sự cố nghiêm trọng. Quyết định rollback được người quản lý phát hành cùng với trưởng nhóm kỹ thuật đưa ra nếu: tỷ lệ không bị treo của bản phát hành mới giảm xuống dưới 99%, phát hiện rò rỉ dữ liệu, chức năng quan trọng (thanh toán, xác thực) không hoạt động cho hơn 5% người dùng hoặc cửa hàng (App Store Review) từ chối bản dựng sau khi xuất bản. Yếu tố kích hoạt rollback phải được xác định trước khi phát hành để quyết định dựa trên sự thật, không phải cảm xúc.
Đối với Android: rollback trong Google Play Console có nghĩa là dừng triển khai theo giai đoạn và chuyển sang phiên bản trước. Nếu bản dựng hiện tại đã được triển khai cho 100% người dùng, hãy xuất bản phiên bản trước dưới dạng bản phát hành mới. Đối với iOS: qua App Store Connect — Phát hành theo giai đoạn → Tạm dừng phát hành → phát hành phiên bản mới với bản sửa lỗi (App Store không cho phép quay lại phiên bản trước). Rollback iOS phức tạp hơn: nhà phát triển cần tổng hợp bản dựng mới với các commit hoàn tác và vượt qua đánh giá lại.
Sau khi rollback, nhóm chuyển sang chế độ xử lý sự cố: phân tích nguyên nhân gốc rễ, sửa lỗi nóng hoặc bản phát hành tiếp theo với bản sửa lỗi, đánh giá sau sự cố. Rollback không phải là thất bại mà là một quy trình tiêu chuẩn. Các nhóm chưa từng rollback có khả năng không nhận thấy vấn đề, chứ không phải họ đang phát hành các bản không có lỗi. Tỷ lệ rollback là một trong các số liệu DORA: các nhóm hiệu suất cao rollback dưới 10% bản phát hành và phục hồi trong vòng chưa đầy 1 giờ.
Các câu hỏi thường gặp
Các ngày tốt nhất là Thứ Ba, Thứ Tư hoặc Thứ Năm. Thứ Hai có lưu lượng truy cập cao từ cuối tuần và Thứ Sáu có nguy cơ bước vào cuối tuần với bản phát hành có vấn đề. Tránh Thứ Sáu: nếu phát hiện sự cố sau khi triển khai, nhóm sẽ phải sửa nó vào cuối tuần hoặc đợi đến Thứ Hai.
Đọc lý do từ chối trong Resolution Center, sửa lỗi và tải lại bản dựng. Nguyên nhân thường gặp: liên kết hỏng, trường chưa điền, nội dung không có đăng ký (nếu được yêu cầu), ảnh chụp màn hình lỗi thời. Từ chối đánh giá App Store làm chậm quá trình phát hành 24-48 giờ, do đó lần tải bản dựng đầu tiên nên được thực hiện 3-5 ngày trước ngày phát hành dự kiến.
Đối với các bản phát hành lớn (thay đổi chính) — 1%. Đối với các bản vá — 5-10%. Giai đoạn đầu tiên nên đủ nhỏ để trong trường hợp xảy ra lỗi, tác động là tối thiểu, nhưng đủ lớn để thu được các số liệu có ý nghĩa thống kê. 1% đối với ứng dụng có 10 triệu người dùng là 100.000 người — đủ để phát hiện các vấn đề nghiêm trọng.
Tiệc phát hành (ăn mừng của nhóm) là tùy chọn nhưng có lợi cho tinh thần. Tốt hơn nên tổ chức sau khi triển khai 100% thành công, không phải tại thời điểm tải bản dựng lên. Ăn mừng phát hành có thể kết hợp với đánh giá sau phát hành để thảo luận về những gì đã tốt và những gì có thể cải thiện.
Trách nhiệm thuộc về người quản lý phát hành (thường là kỹ sư cao cấp hoặc trưởng nhóm kỹ thuật). Quyết định được đưa ra dựa trên dữ liệu từ bảng điều khiển phát hành, không dựa trên thời hạn. Người quản lý phát hành có thẩm quyền hoãn phát hành nếu các số liệu không vượt qua cổng go/no-go.
Tổng kết
Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay
IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.
Đọc thêm