CircleCI 是一个云端 CI/CD 平台,用于自动化构建、测试和部署软件,包括 iOS 和 Android 的移动应用。根据 CircleCI, 2024 的数据,该平台每月处理 超过 3000 万次构建,并提供基于 orbs(流行工具的现成配置包)的独特架构。
要点
CircleCI 是一个云端 CI/CD 平台,成立于 2011 年。该系统允许在 YAML 文件 .circleci/config.yml 中描述流水线,并在隔离的容器或虚拟机中执行它们。CircleCI 支持所有流行的语言和平台,包括 Android、iOS、Flutter 和 React Native。
对于移动开发,CircleCI 提供用于 iOS 构建的 macOS executor(预装 Xcode)、用于 Android 的 Linux executor(带 Android SDK),以及 Gradle 和 CocoaPods 的缓存。关键特性 — orbs,允许用一行代码连接现成的配置:orb: android、orb: ios、orb: flutter。CircleCI 在首次连接仓库时自动检测项目类型并建议模板配置。
该平台支持 SSH 访问正在运行的容器以进行调试 — 分析失败构建时的有用功能。CircleCI CLI 允许在本地验证和执行配置、管理 orbs 和查看日志。该平台通过 webhooks 系统与 GitHub、GitHub Enterprise、Bitbucket 和 GitLab 集成。
CircleCI 架构包括三个层次:Pipeline、Workflow 和 Job。Pipeline — 是在提交时触发的根进程。Pipeline 由 Workflows(Jobs 的图形,可以顺序或并行执行)组成。每个 Job 在 Executor(具有特定镜像的环境)上执行。Workflow 可以包含 approval gates — 部署前的手动确认。
Orbs 是通过 CircleCI Orb Registry 分发的可重用 YAML 配置包。Orb 可以包含 jobs、commands、executors 和示例。流行的 orbs:android、ios、flutter、firebase、slack。例如,连接 android orb 可以用一行代码替换 50 多行配置。CircleCI CLI 允许创建、测试和发布自定义 orbs,以标准化组织中的流水线。
| Executor | 适用于 | 构建 |
|---|---|---|
| Docker | Android、Backend | Linux 容器 |
| macOS | iOS、macOS | 带 Xcode 的 macOS VM |
| Machine | Docker-in-Docker | Ubuntu VM |
| Windows | .NET、WinUI | Windows Server |
Contexts 是在组织级别可用的命名环境变量集。例如,app-store-credentials 上下文包含用于在 App Store 发布的 Apple ID 和密码。这简化了项目之间 secrets 的管理,无需重复。
对于 Android 项目,CircleCI 使用带 Android SDK 的 cibuilds/android Docker 镜像。典型的工作流程包括:checkout、安装 JDK、Gradle 缓存、构建、运行测试。对于 iOS,需要带有 Xcode 和代码签名配置的 macOS executor。首次连接时,CircleCI 自动检测项目类型并生成带有推荐设置的基本配置。
对于 Flutter 项目,CircleCI 提供 circleci/flutter orb,其中包括为 Linux 和 macOS 预装了 Flutter SDK 的 executor。Orb 支持为两个平台构建、缓存 pub-cache 和运行测试。配置仅限于指定 Flutter 版本和构建命令。对于自定义版本的 Flutter 或 Dart,可以使用带有必要 SDK 的 Docker 镜像。Flutter orb 还支持高级选项 — 例如,在构建之前通过 dart analyze 进行代码分析。
CircleCI 的 Android orb 提供现成的 jobs:build-and-test、deploy-to-play-store。Orb 自动配置环境、缓存和签名。连接 orb 后,只需指定 SDK 版本和构建命令。
对于 iOS 构建,指定 executor:macos 和 xcode 版本。CircleCI 提供带有 Xcode 14、15 和 16 的镜像。Checkout 后,代码通过 xcodebuild 编译,测试在模拟器上运行。代码签名通过 fastlane match 或手动安装证书配置。
缓存 — 是 CircleCI 性能的关键要素。缓存机制根据键保留工作流运行之间的目录。对于 Gradle,缓存 ~/.gradle;对于 CocoaPods — Pods/;对于 npm/SPM — node_modules/.build。当 lock 文件更改时,缓存会自动更新。CircleCI 支持单独的策略:save_cache 可以延迟(when: always),而 restore_cache 是必需的。
Parallelism 与 resource class 结合使用,可以精确调整构建性能。Resource class 定义容器的 CPU 和 RAM 数量:small(1 CPU,2 GB)、medium(2 CPU,4 GB)、medium+(3 CPU,5 GB)和 large(4 CPU,8 GB)。对于使用 Xcode 的 iOS 构建,建议使用 resource class medium 或 larger 的 macOS executor — Swift 代码的编译需要大量资源。
Parallelism 将测试分配到多个容器,缩短执行时间。例如:parallelism: 4 在 4 个并行容器中运行测试。CircleCI 自动在容器之间分发测试文件。circleci tests glob 命令收集测试列表,circleci tests split 将它们均匀分配。
- 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
让我们看一个完整的 CircleCI 配置,用于具有两个 job 的 Android 项目:build 和 test。配置包括带 Android SDK 的 Docker executor、Gradle 缓存和并行测试执行。Artifacts 被保存以供下载。build-and-test 工作流在每次推送到主分支时运行这两个 job。
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
在 CircleCI 和替代方案之间选择时 — 如果团队使用 GitHub,GitHub Actions 可能是更简单的选择。对于需要灵活的并行测试执行、自定义 executor 环境和详细构建统计信息的团队,CircleCI 是更好的选择。CircleCI Insights 提供带有流水线性能指标的仪表板:平均构建时间、趋势和瓶颈。Insights 帮助识别长时间运行的 job 并优化它们。CircleCI API 允许以编程方式管理流水线、启动构建和获取指标。
为了安全地处理 secrets,CircleCI 支持 Contexts — 组织级别的命名环境变量集。Contexts 受到基于角色的访问保护:只有特定团队才能使用特定的 context。例如,production-deploy 上下文包含 App Store Connect 密钥,仅对首席开发人员可用。结合 approval gates,这形成了一个完整的 CI/CD 安全系统。
CircleCI Orb Registry 包含数百个用于各种 CI/CD 任务的现成包。对于移动开发,关键的 orbs 包括:circleci/android、circleci/ios、circleci/flutter、laurencerussell/firebase-app-distribution。每个 orb 都有版本控制和文档。Orbs 可以是公共的(所有人可访问)和私有的(仅限您的组织)。
使用 orbs 可以将配置减少 5–10 倍。例如,circleci/android orb 提供带有预装 SDK 的 android/default executor 和 restore-gradle-cache、save-gradle-cache 命令。circleci/ios orb 包含带有 Xcode 的 executor 和通过 fastlane 进行代码签名的命令。Orbs 可以轻松组合:连接 android orb 进行构建,连接 slack orb 进行通知。
CircleCI 还提供对测试报告的内置支持。Store_test_results 自动解析和可视化 JUnit、XCTest 和其他格式的测试结果。对于移动项目,这意味着集中查看失败的测试、执行时间趋势和构建稳定性历史记录,从而简化代码质量的维护。
orbs:
ios: circleci/ios@2.0.0
jobs:
build-and-test:
executor: ios/default
steps:
- checkout
- ios/install-dependencies
- ios/build-and-test
发布自定义 orb 可通过 CircleCI CLI 实现。circleci orb create 和 circleci orb publish 命令将 orb 加载到注册表中。这对于在组织内标准化 CI/CD 非常有用 — 创建一次,在所有项目中使用。
常见问题
CircleCI 提供免费计划,单个容器每月 6000 分钟。Performance Plan(30 美元/月)包括 10 个并行 job 和 14000 分钟。Scale Plan — 具有无限并行的个性化定价。
Orbs 是通过官方注册表分发的 CircleCI 配置的可重用 YAML 包。它们包含用于流行工具和平台的现成 jobs、commands 和 executors。
是的,CircleCI 支持带有预装 Xcode(版本 14、15、16)的 macOS executor。提供了适用于 iOS 17 和 18、watchOS、tvOS 的镜像。代码签名通过 fastlane match 或手动配置。
在 job 中指定 parallelism: N — CircleCI 会将测试分成 N 个容器。circleci tests split 命令均匀分配测试。测试并行执行,总时间与容器数量成比例减少。
CircleCI 提供更灵活的 executor(Docker、macOS、Machine、Windows)、先进的 orbs 系统、内置的并行测试拆分和详细的构建工件。GitHub Actions 在与 GitHub 的集成和简单性方面更胜一筹。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。