Team mobile của chúng tôi vốn dĩ có quy mô nhỏ và hoạt động theo mô hình in-house. Tất cả các công việc từ phát triển, kiểm thử cho đến phân phối đều được trao đổi và xử lý trực tiếp giữa các thành viên trong team. Việc build app được thực hiện ngay trên máy local rồi install trực tiếp cho tester qua cable.
Tuy nhiên, khi dự án mở rộng, nhu cầu chia sẻ bản build cho tester ở nhiều khu vực, hoặc gửi cho khách hàng review/accept trước release trở nên quan trọng. Việc tiếp tục build local bằng cách install trực tiếp trở nên thủ công, không đảm bảo được version, chất lượng code và tốn thời gian.
Chính vì vậy, việc thiết lập CI/CD để phân phối các bản build nhanh chóng, đồng bộ, có versioning rõ ràng và dễ gửi cho tester/khách hàng là yếu tố bắt buộc.
1. Điều kiện hiện tại của team
Tiêu chí |
Mô tả |
Hệ thống quản lý mã nguồn |
GitLab Enterprise |
Nền tảng phát triển |
iOS và Android |
Số lượng developer |
< 5 người |
Resource CI/CD |
Chưa có server riêng để build |
Nhu cầu hiện tại |
Cần chia sẻ build nhanh cho tester/khách hàng |
Mục tiêu |
Tự động hoá build, giảm tải thao tác thủ công, quản lý versioning, dễ maintain |
Tiêu chí |
GitLab CI (self-hosted) |
Bitrise |
GitHub Actions + Fastlane |
Phù hợp mobile |
Có |
Rất dễ |
Tốt |
Cấu hình ban đầu |
Khó (cần runner riêng) |
Rất phù hợp |
Dễ |
Gói miễn phí |
Không rõ ràng (self-host tốn tài nguyên) |
Giới hạn 200 min/tháng |
2000 phút/tháng cho private repo |
Dễ maintain |
Khó nếu team nhỏ |
Rất dễ |
Dễ |
Tự động hoá cert/profile |
Cần làm thủ công |
Có tích hợp |
Hỗ trợ tốt với Match |
Tích hợp TestFlight/Firebase |
Tùy config |
Có sẵn |
Có thể tích hợp dễ dàng |
Dev thực hiện push code như thường lệ vào GitLab (nơi quản lý source chính của dự án). Đây là bước khởi đầu cho chuỗi CI/CD mà không làm thay đổi thói quen của team.
GitLab được cấu hình để mirror tự động mã nguồn sang GitHub repository mỗi khi có commit mới.
Chạy trên máy chủ hoặc local (macOS, Linux, Windows đều được):
Bạn sẽ được hỏi:
Prompt |
Ví dụ trả lời |
Enter the GitLab instance URL: |
https://gitlab.com hoặc URL GitLab self-host |
Enter the registration token: |
Lấy token trong Settings > CI/CD > Runners |
Enter a description for the runner: |
mirror-runner |
Enter tags for the runner (comma-separated): |
mirror |
Enter executor: |
shell |
Lưu ý:
Bây giờ, bạn có thể testing bằng cách push code trên GitLab và theo dõi có update trên GitHub hay không.
3. Fastlane runtest and build iOS app
Sau khi mirror code từ GitLab sang GitHub thành công, workflow GitHub Actions sẽ thực hiện việc build và upload app iOS lên TestFlight thông qua Fastlane. Toàn bộ quy trình được chia thành các bước sau:
Tạo bundle ID cho app test, ví dụ: com.sanan.setup.cicd
4. Distribute build to testers
Cài đặt Fastlane cho dự án (macos):brew install fastlane
fastlane init
fastlane match init
export ASC_KEY_ID="<key_id_appstore_connect_api>"
export ASC_ISSUER_ID="<isuer_id_appstore_connect_api>"
export ASC_KEY_CONTENT="<content_appstore_connect_api>"
export MATCH_PASSWORD="<your_setup>"
export FASTLANE_APPLE_ID="<your_apple_id>"
export DEVELOPER_PORTAL_TEAM_ID="<your_apple_developer_account_id>"
export TEMP_KEYCHAIN_USER="<your_setup>"
export TEMP_KEYCHAIN_PASSWORD="<your_setup>"
Kết quả chạy thành công:
Successfully uploaded the new binary to App Store Connect
1. ACTIONS_DEPLOY_KEY
2. ASC_KEY_ID
3. ASC_ISSUER_ID
4. ASC_KEY_CONTENT
5. MATCH_PASSWORD
6. FASTLANE_APPLE_ID
7. DEVELOPER_PORTAL_TEAM_ID
8. TEMP_KEYCHAIN_USER
9. TEMP_KEYCHAIN_PASSWORD
Lưu ý: ACTIONS_DEPLOY_KEY là private key khi bạn setup ssh thông thường đối với repo lưu ios-certificates
Với phần hướng dẫn chi tiết ở trên, chúng ta đã từng bước triển khai được quy trình CI/CD cho dự án iOS từ tình huống thực tế của một team nhỏ:
Việc áp dụng CI/CD không chỉ giúp tiết kiệm thời gian mà còn tăng độ ổn định, kiểm soát tốt hơn các bản phân phối – đặc biệt khi số lượng thành viên và môi trường kiểm thử bắt đầu mở rộng.
______________________________________________________________
Trong phần 2, chúng ta sẽ tiếp tục mở rộng quy trình này cho Android, sử dụng Firebase App Distribution kết hợp cùng Fastlane và GitHub Actions để tạo quy trình phân phối tương tự cho ứng dụng Android của bạn.
Nếu bạn chưa từng triển khai CI/CD trước đó, hãy thử áp dụng phần iOS này ngay trong dự án cá nhân hoặc staging – bạn sẽ thấy sự khác biệt rõ rệt trong quy trình làm việc hằng ngày.