Continuous Delivery (CD) là một thực hành phát triển trong đó phần mềm luôn ở trạng thái sẵn sàng phát hành ra môi trường sản xuất. Mỗi thay đổi đều trải qua tất cả các giai đoạn kiểm thử tự động và xác minh, sau đó có thể được triển khai bằng một cú nhấp chuột hoặc tự động. Theo Google Cloud DORA Report, 2025, các nhóm thực hành CD phát hành phiên bản thường xuyên hơn 208 lần và nhanh hơn 106 lần so với các nhóm có mức tự động hóa thấp.
Những điểm chính
Continuous Delivery (CD) là một phần mở rộng của Continuous Integration, thêm tự động hóa cho tất cả các giai đoạn chuẩn bị phát hành: xây dựng bản dựng release, ký bằng chứng chỉ, làm rối, xác minh siêu dữ liệu cửa hàng ứng dụng và triển khai lên môi trường staging. Thuật ngữ này được Jez Humble và David Farley giới thiệu trong cuốn sách “Continuous Delivery” (2010), nơi họ chính thức hóa thực hành cho phép các nhóm làm cho việc phát hành có thể dự đoán trước và ít rủi ro.
Trước khi áp dụng CD, việc phát hành là một sự kiện: nhóm tập trung trong một phòng, thực hiện danh sách kiểm tra 20 mục, chạy tập lệnh thủ công và hy vọng không có gì hỏng hóc. Continuous Delivery biến việc phát hành từ một sự kiện thành một quy trình: một thay đổi nhỏ trong mã nguồn có thể được gửi đến người dùng trong vài phút, không phải vài tuần. Amazon, Netflix và Etsy là những công ty đầu tiên áp dụng CD vào những năm 2010 — ngày nay nó là tiêu chuẩn cho các nhóm sản phẩm.
Phân phối tính năng nhanh chóng là một lợi thế cạnh tranh. Nếu đối thủ cạnh tranh phát hành chức năng mới trong vài ngày trong khi bạn mất vài tháng, thị trường sẽ chọn đối thủ cạnh tranh. Các chỉ số DORA cho thấy: các nhóm elite (có CD) có thời gian triển khai dưới 1 giờ, các nhóm thấp (không có CD) — từ 1 tuần đến 1 tháng. CD cũng giảm thiểu rủi ro một cách triệt để: những thay đổi nhỏ khó làm hỏng hơn một bản phát hành lớn hàng quý.
Các thuật ngữ CI, CD và Continuous Deployment thường bị nhầm lẫn, nhưng có một ranh giới rõ ràng giữa chúng. Hiểu được sự khác biệt giúp thiết kế pipeline đúng cách và chọn mức độ tự động hóa phù hợp với độ chín của nhóm và yêu cầu kinh doanh.
CI là nền tảng mà CD được xây dựng trên đó. CI đảm bảo rằng mọi commit đều trải qua quá trình xây dựng và kiểm thử. Nếu không có CI, CD là không thể: nếu mã nguồn không được xác minh, nó không thể được phát hành. CI xác minh tính đúng đắn, CD xác minh sự sẵn sàng cho sử dụng kinh doanh.
CD thêm vào CI các giai đoạn xây dựng bản dựng release, xác minh siêu dữ liệu, ký và triển khai lên môi trường staging hoặc cửa hàng ứng dụng để kiểm thử beta. Sự khác biệt chính — quyết định phát hành ra môi trường sản xuất do một người (quản lý, chủ sở hữu sản phẩm) đưa ra. CD làm cho việc phát hành “chỉ cách một cú nhấp chuột” — đơn giản và an toàn.
Continuous Deployment là tự động hóa hoàn toàn: mọi thay đổi vượt qua tất cả các giai đoạn của pipeline CD sẽ tự động được gửi đến môi trường sản xuất mà không cần phê duyệt thủ công. Continuous Deployment có thể áp dụng cho các sản phẩm SaaS và dịch vụ web, nhưng hiếm khi được sử dụng trong phát triển di động do chính sách của cửa hàng ứng dụng (App Store Review, Google Play Review yêu cầu gửi thủ công).
| Thực hành | Tự động hóa | Phát hành ra sản xuất | Điển hình cho |
|---|---|---|---|
| CI | Xây dựng + Kiểm thử | Không | Mọi dự án |
| CD | Xây dựng + Kiểm thử + Bản dựng release + Phân phối | Theo yêu cầu | Ứng dụng di động |
| Continuous Deployment | Hoàn toàn: Xây dựng → Kiểm thử → Phân phối → Phát hành | Tự động | Dịch vụ web, SaaS |
CD cho ứng dụng di động có các đặc điểm phân biệt nó với các pipeline web và backend. Các bản phát hành di động phải đi qua các cửa hàng ứng dụng (App Store Review, Google Play Review), điều này thêm một rào cản về thời gian và quy trình. CD tự động hóa mọi thứ có thể tự động hóa trước khi gửi đi xem xét để tối đa hóa cơ hội vượt qua xác minh ngay lần đầu tiên.
Pipeline CD Android bao gồm: xây dựng AAB (Android App Bundle), ký bằng khóa release, làm rối qua R8/ProGuard, kiểm tra kích thước APK và các lớp multidex, tạo ghi chú phát hành. Sử dụng product flavors của Gradle (free/paid, dev/staging/prod) cho phép quản lý nhiều cấu hình từ một pipeline duy nhất.
CD iOS yêu cầu ký bằng chứng chỉ qua Fastlane match, kiểm tra tuân thủ biểu tượng (yêu cầu của App Store — 1024×1024 px), xác thực siêu dữ liệu (tên, mô tả, từ khóa), kiểm tra không có API riêng tư. Xác thực kỹ thuật được thực hiện qua altool --validate-app mà không tải lên App Store Connect, cung cấp phản hồi nhanh chóng.
# Fastfile — pipeline CD hoàn chỉnh cho iOS và Android
platform :ios do
desc "CD iOS — chuẩn bị phát hành và tải lên TestFlight"
lane :deliver_to_testflight do
capture_screenshots
match(type: "appstore")
build_app(
scheme: "MyApp",
export_method: "app-store",
workspace: "MyApp.xcworkspace"
)
pilot(skip_waiting_for_build: true)
end
end
platform :android do
desc "CD Android — xây dựng AAB và tải lên Google Play Console"
lane :deliver_to_internal do
gradle(
task: "bundleRelease",
build_type: "Release",
print_command: true
)
upload_to_play_store(
track: "internal",
skip_upload_metadata: true
)
end
end
Fastlane deliver_to_testflight thu thập ảnh chụp màn hình, lấy chứng chỉ qua match, xây dựng IPA và tải lên TestFlight. Lane deliver_to_internal cho Android xây dựng Release AAB qua Gradle và tải nó lên đường ray nội bộ của Google Play Console. Cả hai pipeline đều chạy từ CI sau khi vượt qua các bài kiểm thử.
Pipeline CD bao gồm các giai đoạn tuần tự, mỗi giai đoạn thêm sự tin tưởng rằng bản phát hành đã sẵn sàng cho người dùng. Các giai đoạn được chia thành kỹ thuật (xây dựng, ký) và sản phẩm (siêu dữ liệu, ảnh chụp màn hình, xác minh mô tả). Bỏ qua bất kỳ giai đoạn nào làm tăng nguy cơ bản phát hành bị từ chối bởi cửa hàng ứng dụng.
Một thành phần quan trọng của CD là quản lý phiên bản tự động. Tăng phiên bản (versionCode và versionName cho Android, CFBundleVersion và CFBundleShortVersionString cho iOS) được thực hiện dựa trên thẻ Git hoặc phiên bản trước đó trong cửa hàng. Fastlane increment_version_number và các lệnh Gradle (versionCode auto-increment) tự động hóa bước này.
Google Play Console và App Store Connect yêu cầu: mô tả ứng dụng, từ khóa, danh mục, xếp hạng, liên kết chính sách bảo mật. CD bao gồm việc kiểm tra sự hiện diện và tính chính xác của siêu dữ liệu. Fastlane deliver và supply tự động hóa việc tải lên mô tả, ảnh chụp màn hình và biểu tượng cùng với bản dựng.
Trước khi gửi đi xem xét, pipeline thực hiện kiểm tra cổng: kiểm tra kích thước bản dựng (APK > 200 MB bị Google Play từ chối), sự hiện diện của tất cả bản địa hóa, không có ký hiệu gỡ lỗi trong bản dựng release, kiểm tra tệp ánh xạ ProGuard để giải mã nhật ký sự cố. Nếu bất kỳ kiểm tra nào thất bại — pipeline sẽ chặn bản phát hành.
Mức độ tin cậy vào CD tỷ lệ thuận với chất lượng của các bài kiểm thử tự động. Nếu kiểm thử không phát hiện hồi quy — bản phát hành có thể làm hỏng môi trường sản xuất và nhóm mất niềm tin vào CD. CD di động yêu cầu một kim tự tháp kiểm thử ba cấp được điều chỉnh phù hợp với đặc thù của nền tảng.
Kiểm thử đơn vị xác minh logic kinh doanh một cách độc lập. Độ bao phủ mã nguồn nên ít nhất 70% cho các mô-đun quan trọng (xác thực, thanh toán, mạng). CI chạy kiểm thử đơn vị trên mỗi lần đẩy, và nếu chúng thất bại — pipeline CD sẽ bị chặn cho đến khi được sửa.
Chúng xác minh sự tương tác của các thành phần: lớp mạng với API thực (hoặc máy chủ giả), cơ sở dữ liệu, hệ thống tệp. Kiểm thử Room DAO cho Android, kiểm thử Core Data cho iOS là các ví dụ về kiểm thử tích hợp. Chúng chậm hơn kiểm thử đơn vị (1–5 phút) và được thực thi ở giai đoạn CD, không phải CI trên mỗi commit.
Kiểm thử ảnh chụp màn hình (snapshot testing) so sánh màn hình ứng dụng với hình ảnh tham chiếu. Nếu một thay đổi mã nguồn làm thay đổi giao diện — kiểm thử thất bại và nhà phát triển kiểm tra xem thay đổi có được mong đợi hay không. Android hỗ trợ Roborazzi và Paparazzi, iOS — SnapshotTesting của Point-Free. Kiểm thử ảnh chụp màn hình được thực thi trước khi phát hành như một phần của pipeline CD.
Việc triển khai Continuous Delivery không chỉ đòi hỏi công cụ mà còn cần sự thay đổi trong văn hóa nhóm. Các thực hành dưới đây dựa trên nhiều năm kinh nghiệm của các nhóm di động tại Google, Spotify và Uber và được điều chỉnh cho các dự án ở mọi quy mô.
Mã nguồn của tính năng mới được gửi đến môi trường sản xuất nhưng ẩn sau một cờ. Feature flags cho phép triển khai mã nguồn trước khi tính năng sẵn sàng cho người dùng và vô hiệu hóa ngay lập tức khi có sự cố. Thư viện: LaunchDarkly, Firebase Remote Config, Unleash. Feature flags là yêu cầu bắt buộc cho CD trong các dự án di động.
Trước khi gửi đến môi trường sản xuất, bản dựng được triển khai lên staging — một môi trường giống hệt sản xuất nhưng với dữ liệu thử nghiệm. Các kỹ sư QA xác minh tính năng trên bản dựng staging được cài đặt qua TestFlight hoặc đường ray Internal Testing. Nếu staging vượt qua — bản dựng nhận được phê duyệt để gửi đi xem xét tại cửa hàng.
CD tự động tạo ghi chú phát hành dựa trên thông điệp commit. Conventional Commits (feat:, fix:, chore:) và thẻ Git ở định dạng phiên bản ngữ nghĩa cho phép phân tích lịch sử thay đổi. Fastlane changelog_from_git_commits thu thập các thay đổi giữa hai thẻ cuối cùng và định dạng chúng cho cửa hàng ứng dụng.
CD không kết thúc với việc xuất bản — sau khi phát hành, việc giám sát bắt đầu: tỷ lệ sự cố, tỷ lệ ANR cho Android, thời gian khởi động, tỷ lệ thất bại thanh toán. Nếu các chỉ số vượt quá giới hạn bình thường — pipeline CD sẽ tự động hoàn tác bản phát hành hoặc thông báo cho nhóm. Công cụ: Firebase Crashlytics, Sentry, New Relic.
// Ví dụ về Feature Flag với Firebase Remote Config cho CD
class FeatureManager(
private val remoteConfig: FirebaseRemoteConfig
) {
fun isNewCheckoutEnabled(): Boolean {
return remoteConfig.getBoolean("new_checkout_enabled")
}
fun getRecommendedVersion(): String {
return remoteConfig.getString("minimum_app_version")
}
}
// Sử dụng trong mã nguồn
if (featureManager.isNewCheckoutEnabled()) {
showNewCheckoutScreen()
} else {
showLegacyCheckoutScreen()
}
Các câu hỏi thường gặp
Continuous Delivery (CD) tự động hóa việc chuẩn bị phát hành nhưng để quyết định triển khai cho một người. Continuous Deployment là CD + phát hành tự động ra môi trường sản xuất mà không có sự can thiệp của con người. Trong phát triển di động, Continuous Deployment là không thể do yêu cầu xem xét bắt buộc của cửa hàng ứng dụng.
Sử dụng cùng một bản dựng cho tất cả các giai đoạn: CI kiểm thử bản dựng debug, CD xây dựng bản dựng release từ cùng một nguồn. Fastlane build_app và Gradle assembleRelease cô lập cấu hình xây dựng. Ngoài ra, hãy chạy kiểm thử khói trên bản dựng release trong pipeline CD trước khi gửi đến cửa hàng.
Có, CD có thể được triển khai trong bất kỳ dự án nào. Bắt đầu với tự động hóa một giai đoạn — ví dụ, xây dựng bản dựng release. Sau đó thêm ký, sau đó tải lên TestFlight. Dần dần mở rộng pipeline. Điều quan trọng là không cố gắng tự động hóa mọi thứ cùng một lúc: CD được triển khai một cách lặp đi lặp lại.
Feature flags là một yếu tố kích hoạt chính của CD. Chúng cho phép gửi mã nguồn đến môi trường sản xuất mà không kích hoạt nó cho người dùng. Nếu một tính năng không ổn định — cờ được tắt mà không cần xây dựng lại ứng dụng. Firebase Remote Config và LaunchDarkly tích hợp với pipeline CD và được quản lý qua giao diện web hoặc API.
Với CD, các nhóm phát hành hàng tuần hoặc hai tuần một lần. Các nhóm elite từ báo cáo DORA thực hiện nhiều bản phát hành mỗi ngày thông qua Continuous Deployment (cho phía máy chủ). Đối với ứng dụng di động, tần suất tối ưu là một lần mỗi 1–2 tuần: việc xem xét của App Store mất 1–3 ngày và phát hành thường xuyên hơn không cho người dùng thời gian để nhận thấy các thay đổi.
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