CI/CD (Continuous Integration / Continuous Delivery) là phương pháp tự động xây dựng, kiểm thử và phân phối ứng dụng sau mỗi thay đổi mã. Theo Statista (2025), 80% đội ngũ phát triển di động sử dụng CI/CD trong công việc. Bài viết này đề cập đến các công cụ CI phổ biến, Fastlane để tự động hóa bản dựng di động, cũng như Canary Release và Feature Flags.
Những điểm chính
Continuous Integration là nền tảng của tự động hóa CI/CD cho ứng dụng di động. Đây là phương pháp mà mỗi nhà phát triển hợp nhất mã của họ vào kho lưu trữ chung nhiều lần mỗi ngày. Sau mỗi lần push, máy chủ CI tự động xây dựng dự án và chạy kiểm thử. Nếu kiểm thử thất bại, bản dựng được coi là hỏng và nhóm khắc phục sự cố ngay lập tức. CI ngăn chặn tình huống «nó chạy trên máy của tôi» khi mã của một nhà phát triển làm hỏng mã của người khác.
Build Pipeline — một chuỗi các bước được thực thi sau mỗi lần push: kiểm tra mã → kiểm thử đơn vị → xây dựng APK/IPA debug → kiểm thử tích hợp → xây dựng release. Mỗi bước chỉ chạy sau khi bước trước đó thành công. Các tạo phẩm xây dựng — APK, IPA, AAB, báo cáo kiểm thử — được lưu và có thể tải xuống.
Continuous Delivery — mã được xây dựng và kiểm thử tự động, nhưng con người quyết định có phát hành lên sản xuất hay không. Continuous Deployment — mọi bản dựng thành công đều được tự động phát hành lên sản xuất. Đối với ứng dụng di động, CD (phân phối đến cửa hàng) qua TestFlight hoặc Internal Testing phổ biến hơn vì quyết định xuất bản cuối cùng do nhà phát triển hoặc quản lý đưa ra. Staging — môi trường gần với sản xuất nhất có thể, được sử dụng để kiểm thử bản dựng trước khi phát hành.
GitHub Actions là hệ thống CI/CD tích hợp để tự động hóa ứng dụng di động trên GitHub. Actions sử dụng cấu hình YAML (.github/workflows) để định nghĩa đường ống. Các hành động có sẵn cho phát triển di động: actions/setup-java, gradle-build-action cho Android, xcodebuild-action cho iOS. GitHub Actions cung cấp 2000 phút miễn phí mỗi tháng cho kho lưu trữ riêng tư.
Ví dụ: quy trình Android bao gồm checkout mã, thiết lập JDK 17, lưu cache phụ thuộc Gradle, chạy lint và kiểm thử đơn vị, xây dựng APK và tải lên tạo phẩm. Cho iOS — checkout, thiết lập Xcode, pod install, chạy XCTest, lưu trữ và xuất IPA. GitHub Actions tích hợp với GitHub Releases, Slack và Telegram để gửi thông báo.
GitLab CI là hệ thống CI/CD tích hợp trong GitLab, được cấu hình qua .gitlab-ci.yml. GitLab CI sử dụng runner — các tác nhân thực thi công việc. Cho phát triển di động, bạn có thể sử dụng runner dùng chung (Linux cho Android) hoặc runner riêng (macOS cho iOS). GitLab CI hỗ trợ công việc song song, tạo phẩm, môi trường và phê duyệt thủ công cho các bản phát hành sản xuất.
Bitrise là nền tảng CI/CD chuyên về tự động hóa ứng dụng di động. Bitrise cung cấp các Steps có sẵn cho Android, iOS, Flutter và React Native: Gradle Runner, Xcode Archive, Flutter Test, CocoaPods Install. Bitrise tự động cấu hình ký mã cho iOS (qua Codesigndoc) và cung cấp máy ảo với Xcode, Android SDK, Flutter và các công cụ khác được cài đặt sẵn.
Lợi ích của Bitrise: thiết lập đơn giản qua trình chỉnh sửa Workflow trực quan, hỗ trợ xây dựng song song, tích hợp với Firebase Test Lab, App Store Connect và Google Play Console. Bitrise cung cấp 90 phút miễn phí mỗi tháng cho dự án cá nhân. Tại IT Sectr, chúng tôi sử dụng Bitrise cho tất cả dự án di động — nó đơn giản hóa CI/CD đáng kể so với thiết lập thủ công GitHub Actions.
| Tiêu chí | GitHub Actions | GitLab CI | Bitrise | CircleCI |
|---|---|---|---|---|
| Chuyên môn | Đa năng | Đa năng | Di động | Đa năng |
| macOS cho iOS | Có (macOS runner) | Runner riêng | Có (tích hợp) | Có (macOS) |
| Giới hạn miễn phí | 2000 phút/tháng | 400 phút/tháng | 90 phút/tháng | 6000 phút/tháng |
| Tích hợp Fastlane | Qua run script | Qua run script | Step có sẵn | Qua run script |
| Ký mã | Thiết lập thủ công | Thiết lập thủ công | Tự động | Qua Fastlane |
| Xây dựng song song | Có | Có | Có | Có |
Fastlane là công cụ tự động hóa ứng dụng di động cho iOS và Android, được viết bằng Ruby. Fastlane bao gồm hệ thống hành động có sẵn (hơn 200) và DSL để mô tả kịch bản qua Fastfile. Fastlane giải quyết các tác vụ mà mọi nhà phát triển di động thực hiện thủ công: ký mã, tạo ảnh chụp màn hình, tải lên TestFlight và Google Play, quản lý chứng chỉ và hồ sơ cấp phép.
Lane — một kịch bản có tên trong Fastfile. Ví dụ: lane :release do — chuỗi hành động để phát hành bản release. Match — công cụ lưu trữ và đồng bộ an toàn chứng chỉ và hồ sơ cấp phép qua kho Git mã hóa. Gym — xây dựng và lưu trữ ứng dụng iOS (bao bọc xcodebuild). Pilot — tải lên và quản lý bản dựng trong TestFlight. Deliver — tải lên ứng dụng và siêu dữ liệu lên App Store Connect. Snapshot — tự động tạo ảnh chụp màn hình trên tất cả ngôn ngữ. Screengrab — tự động tạo ảnh chụp màn hình cho Android.
Ví dụ Fastfile cho Android: lane :beta gọi gradle (assembleRelease), sau đó firebase_app_distribution để phân phối cho người kiểm thử. Cho iOS: lane :beta gọi match (tải chứng chỉ), gym (lưu trữ) và pilot (tải lên TestFlight). Fastlane có thể chạy cục bộ và trên máy chủ CI — biến nó thành công cụ phổ quát trong bất kỳ dự án di động nào.
Canary Release là chiến lược tự động hóa CI/CD để triển khai phiên bản ứng dụng mới cho một tỷ lệ nhỏ người dùng (1–5%) trước khi phát hành đầy đủ. Trong Google Play Console, điều này được thực hiện qua Staged Rollout: bạn phát hành bản cập nhật cho 5% khán giả, theo dõi sự cố và số liệu, và tăng tỷ lệ nếu không có vấn đề. Trong App Store Connect — qua Phased Release for Automatic Updates.
A/B Testing — so sánh hai phiên bản của một tính năng trên các nhóm người dùng ngẫu nhiên. Trong phát triển di động, kiểm thử A/B được thực hiện qua Feature Flags, Firebase Remote Config hoặc logic phía máy chủ. Canary Release và kiểm thử A/B giảm thiểu rủi ro khi triển khai tính năng mới.
Feature Flag (Feature Toggle) — kích hoạt có điều kiện chức năng mà không cần triển khai mã mới. Feature Flag là một kiểm tra trong mã: if (featureFlag.isEnabled()) { /* mã mới */ } else { /* mã cũ */ }. Các cờ được quản lý qua dịch vụ: LaunchDarkly, Split.io, Firebase Remote Config. Feature Flags cho phép nhà phát triển hợp nhất mã vào main ngay cả khi tính năng chưa sẵn sàng cho người dùng.
LaunchDarkly — nền tảng quản lý Feature Flags phổ biến nhất. LaunchDarkly cung cấp SDK cho iOS, Android, Flutter và React Native. Bạn có thể kích hoạt tính năng cho người dùng, phân khúc, khu vực cụ thể hoặc tỷ lệ phần trăm khán giả. Feature Flags cũng được sử dụng như kill switch — vô hiệu hóa ngay lập tức tính năng có vấn đề mà không cần phát hành phiên bản ứng dụng mới.
Câu hỏi thường gặp
Bắt đầu với GitHub Actions — nếu mã của bạn trên GitHub. Actions miễn phí cho kho lưu trữ công khai, hỗ trợ sẵn Android và iOS (macOS runner) và có hệ sinh thái hành động có sẵn rộng lớn. Cho chuyên môn di động — Bitrise.
Không, dịch vụ CI (GitHub Actions, Bitrise, CircleCI) cung cấp macOS runner. Bạn trả tiền theo phút sử dụng. Để gỡ lỗi Fastlane cục bộ cần Mac, nhưng CI có thể chạy trên đám mây.
Canary Release — triển khai phiên bản mới cho một nhóm người dùng để kiểm tra độ ổn định. A/B Testing — so sánh hai biến thể của một tính năng để chọn ra biến thể tốt hơn. Canary về độ tin cậy, A/B về chuyển đổi.
Fastlane không bắt buộc nhưng được khuyến nghị cao. Không có Fastlane, bạn phải chạy xcodebuild thủ công, quản lý chứng chỉ và tải bản dựng lên qua giao diện web. Fastlane tự động hóa tất cả các tác vụ này bằng một lệnh duy nhất.
Match là công cụ Fastlane để quản lý chứng chỉ Code Signing iOS. Match lưu trữ chứng chỉ và hồ sơ cấp phép trong kho Git mã hóa và đồng bộ chúng giữa tất cả nhà phát triển và máy chủ CI.
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.