CircleCI là nền tảng CI/CD đám mây để tự động hóa việc build, kiểm thử và triển khai phần mềm, bao gồm các ứng dụng di động cho iOS và Android. Theo CircleCI, 2024, nền tảng xử lý hơn 30 triệu bản build hàng tháng và cung cấp kiến trúc độc đáo dựa trên orbs — các gói cấu hình có sẵn cho các công cụ phổ biến.
Những điểm chính
CircleCI là nền tảng CI/CD đám mây được thành lập vào năm 2011. Hệ thống cho phép mô tả các pipeline trong tệp YAML .circleci/config.yml và chạy chúng trong các container biệt lập hoặc máy ảo. CircleCI hỗ trợ tất cả các ngôn ngữ và nền tảng phổ biến, bao gồm Android, iOS, Flutter và React Native.
Đối với phát triển di động, CircleCI cung cấp các executor macOS cho build iOS với Xcode được cài đặt sẵn, executor Linux cho Android với Android SDK, cũng như bộ nhớ đệm cho Gradle và CocoaPods. Một tính năng chính là orbs, cho phép kết nối các cấu hình có sẵn chỉ với một dòng: orb: android, orb: ios, orb: flutter. CircleCI tự động phát hiện loại dự án và đề xuất cấu hình mẫu khi kết nối kho lưu trữ lần đầu tiên.
Nền tảng hỗ trợ truy cập SSH vào các container đang chạy để gỡ lỗi — một tính năng hữu ích khi khắc phục sự cố build bị lỗi. CircleCI CLI cho phép xác thực và chạy cấu hình cục bộ, quản lý orbs và xem nhật ký. Nền tảng tích hợp với GitHub, GitHub Enterprise, Bitbucket và GitLab thông qua hệ thống webhook.
Kiến trúc CircleCI bao gồm ba cấp độ: Pipeline, Workflow và Job. Pipeline là quy trình gốc được kích hoạt khi commit. Pipeline bao gồm các Workflows — một đồ thị các Jobs có thể chạy tuần tự hoặc song song. Mỗi Job chạy trên một Executor — một môi trường với một hình ảnh cụ thể. Workflow có thể bao gồm các approval gates — xác nhận thủ công trước khi triển khai.
Orbs là các gói cấu hình YAML có thể tái sử dụng được phân phối thông qua CircleCI Orb Registry. Một Orb có thể chứa jobs, commands, executors và các ví dụ. Orbs phổ biến: android, ios, flutter, firebase, slack. Ví dụ, thêm orb android thay thế hơn 50 dòng cấu hình bằng một dòng duy nhất. CircleCI CLI cho phép tạo, kiểm thử và xuất bản các orbs của riêng bạn để tiêu chuẩn hóa pipeline trong tổ chức.
| Executor | Phù hợp cho | Môi trường build |
|---|---|---|
| Docker | Android, Backend | Container Linux |
| macOS | iOS, macOS | VM macOS với Xcode |
| Machine | Docker-in-Docker | VM Ubuntu |
| Windows | .NET, WinUI | Windows Server |
Contexts là các tập hợp biến môi trường được đặt tên, có sẵn ở cấp tổ chức. Ví dụ, ngữ cảnh app-store-credentials chứa Apple ID và mật khẩu để xuất bản lên App Store. Điều này đơn giản hóa việc quản lý secrets giữa các dự án mà không trùng lặp.
Đối với dự án Android, CircleCI sử dụng Docker image cibuilds/android với Android SDK. Quy trình làm việc điển hình bao gồm: checkout, cài đặt JDK, bộ nhớ đệm Gradle, build, chạy kiểm thử. Đối với iOS, cần có executor macOS với Xcode và thiết lập code signing. Khi kết nối lần đầu, CircleCI tự động phát hiện loại dự án và tạo cấu hình cơ bản với các cài đặt được đề xuất.
Đối với các dự án Flutter, CircleCI cung cấp orb circleci/flutter, bao gồm các executor với Flutter SDK được cài đặt sẵn cho Linux và macOS. Orb hỗ trợ build cho cả hai nền tảng, bộ nhớ đệm pub-cache và chạy kiểm thử. Việc thiết lập chỉ đơn giản là chỉ định phiên bản Flutter và các lệnh build. Đối với các phiên bản Flutter hoặc Dart tùy chỉnh, bạn có thể sử dụng Docker image với SDK cần thiết. Flutter orb cũng hỗ trợ các tùy chọn nâng cao — ví dụ, phân tích mã qua dart analyze trước khi build.
Android orb từ CircleCI cung cấp các job có sẵn: build-and-test, deploy-to-play-store. Orb tự động cấu hình môi trường, bộ nhớ đệm và chữ ký. Sau khi thêm orb, bạn chỉ cần chỉ định phiên bản SDK và các lệnh build.
Đối với build iOS, executor được đặt thành macos với một phiên bản Xcode. CircleCI cung cấp các image với Xcode 14, 15 và 16. Sau khi checkout, mã được biên dịch qua xcodebuild và các bài kiểm thử được chạy trên trình mô phỏng. Code signing được cấu hình qua fastlane match hoặc cài đặt chứng chỉ thủ công.
Bộ nhớ đệm là yếu tố hiệu suất chính trong CircleCI. Cơ chế bộ nhớ đệm lưu các thư mục giữa các lần chạy workflow bằng cách sử dụng một khóa. Đối với Gradle, ~/.gradle được lưu vào bộ nhớ đệm; cho CocoaPods — Pods/; cho npm/SPM — node_modules/.build. Khi tệp khóa thay đổi, bộ nhớ đệm được cập nhật tự động. CircleCI hỗ trợ các chính sách riêng biệt: save_cache có thể được trì hoãn (when: always), trong khi restore_cache là bắt buộc.
Song song hóa kết hợp với resource class cho phép tinh chỉnh hiệu suất build. Resource class xác định CPU và RAM cho một container: small (1 CPU, 2 GB), medium (2 CPU, 4 GB), medium+ (3 CPU, 5 GB) và large (4 CPU, 8 GB). Đối với build iOS với Xcode, nên sử dụng executor macOS với resource class medium hoặc larger — việc biên dịch mã Swift yêu cầu tài nguyên đáng kể.
Song song hóa chia các bài kiểm thử trên nhiều container, giảm thời gian chạy. Ví dụ: parallelism: 4 chạy kiểm thử trong 4 container song song. CircleCI tự động phân phối các tệp kiểm thử giữa các container. Lệnh circleci tests glob thu thập danh sách kiểm thử và circleci tests split phân phối chúng đồng đều.
- restore_cache:
keys:
- v1-gradle-{{ checksum "build.gradle" }}
- v1-gradle-
- run: ./gradlew assembleDebug
- save_cache:
key: v1-gradle-{{ checksum "build.gradle" }}
paths:
- ~/.gradle/caches
- ~/.gradle/wrapper
Hãy xem xét cấu hình CircleCI đầy đủ cho một dự án Android với hai job: build và test. Cấu hình bao gồm một Docker executor với Android SDK, bộ nhớ đệm Gradle và thực thi kiểm thử song song. Các artifact được lưu để tải xuống. Workflow build-and-test chạy cả hai job mỗi khi push lên nhánh chính.
version: 2.1
orbs:
android: circleci/android@2.5.0
jobs:
build:
executor: android/default
steps:
- checkout
- android/restore-gradle-cache
- run: ./gradlew assembleRelease
- android/save-gradle-cache
- store_artifacts:
path: app/build/outputs/apk/release
- store_test_results:
path: app/build/reports/tests
test:
executor: android/default
parallelism: 4
steps:
- checkout
- android/restore-gradle-cache
- run:
command: |
cd app
./gradlew test
workflows:
version: 2
build-and-test:
jobs:
- build
- test
Khi lựa chọn giữa CircleCI và các giải pháp thay thế — nếu nhóm của bạn sử dụng GitHub, GitHub Actions có thể là lựa chọn đơn giản hơn. CircleCI phù hợp hơn cho các nhóm cần thực thi kiểm thử song song linh hoạt, cấu hình môi trường executor tùy chỉnh và thống kê build chi tiết. CircleCI Insights cung cấp bảng điều khiển với các chỉ số hiệu suất pipeline: thời gian build trung bình, xu hướng và điểm nghẽn. Insights giúp xác định các job chạy lâu và tối ưu hóa chúng. CircleCI API cho phép quản lý pipeline theo chương trình, kích hoạt build và lấy các chỉ số.
Để quản lý secrets an toàn, CircleCI hỗ trợ Contexts — các tập hợp biến môi trường được đặt tên ở cấp tổ chức. Contexts được bảo vệ bằng quyền truy cập dựa trên vai trò: chỉ các nhóm cụ thể mới có thể sử dụng một ngữ cảnh nhất định. Ví dụ, ngữ cảnh production-deploy chứa khóa App Store Connect và chỉ dành cho các nhà phát triển chính. Kết hợp với approval gates, điều này tạo thành một hệ thống bảo mật CI/CD toàn diện.
CircleCI Orb Registry chứa hàng trăm gói có sẵn cho các tác vụ CI/CD khác nhau. Đối với phát triển di động, các orbs chính bao gồm: circleci/android, circleci/ios, circleci/flutter, laurencerussell/firebase-app-distribution. Mỗi orb được quản lý phiên bản và có tài liệu. Orbs có thể công khai (có sẵn cho tất cả mọi người) hoặc riêng tư (chỉ cho tổ chức của bạn).
Sử dụng orbs giảm cấu hình từ 5–10 lần. Ví dụ, orb circleci/android cung cấp executor android/default với SDK được cài đặt sẵn và các lệnh restore-gradle-cache, save-gradle-cache. Orb circleci/ios bao gồm một executor với Xcode và các lệnh cho code signing qua fastlane. Orbs có thể dễ dàng kết hợp: thêm orb android để build và orb slack để nhận thông báo.
CircleCI cũng cung cấp hỗ trợ báo cáo kiểm thử tích hợp. Store_test_results tự động phân tích và trực quan hóa kết quả kiểm thử từ JUnit, XCTest và các định dạng khác. Đối với các dự án di động, điều này có nghĩa là xem tập trung các kiểm thử thất bại, xu hướng thời gian chạy và lịch sử ổn định build, giúp đơn giản hóa việc duy trì chất lượng mã.
orbs:
ios: circleci/ios@2.0.0
jobs:
build-and-test:
executor: ios/default
steps:
- checkout
- ios/install-dependencies
- ios/build-and-test
Xuất bản orb tùy chỉnh có sẵn qua CircleCI CLI. Các lệnh circleci orb create và circleci orb publish tải orb lên registry. Điều này hữu ích để tiêu chuẩn hóa CI/CD trong tổ chức — tạo một lần, sử dụng trong tất cả các dự án.
Các câu hỏi thường gặp
CircleCI cung cấp gói miễn phí với 6000 phút mỗi tháng cho một container. Performance Plan ($30/tháng) bao gồm 10 job song song và 14.000 phút. Scale Plan — giá tùy chỉnh với song song hóa không giới hạn.
Orbs là các gói cấu hình YAML có thể tái sử dụng được phân phối thông qua registry chính thức. Chúng chứa các jobs, commands và executors có sẵn cho các công cụ và nền tảng phổ biến.
Có, CircleCI hỗ trợ macOS executor với Xcode được cài đặt sẵn (phiên bản 14, 15, 16). Có sẵn các image cho iOS 17 và 18, watchOS và tvOS. Code signing được cấu hình qua fastlane match hoặc thủ công.
Chỉ định parallelism: N trong job — CircleCI sẽ chia các bài kiểm thử trên N container. Lệnh circleci tests split phân phối các bài kiểm thử đồng đều. Các bài kiểm thử chạy song song, giảm tổng thời gian tỷ lệ với số lượng container.
CircleCI cung cấp các executor linh hoạt hơn (Docker, macOS, Machine, Windows), hệ thống orb tiên tiến, phân chia kiểm thử song song tích hợp và các artifact build chi tiết. GitHub Actions vượt trội về tích hợp GitHub và sự đơn giản.
Tóm tắ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