2026 年移动应用 CI/CD 方案怎么选:一份实用对比
在构建速度、定价以及移动团队真正关心的问题上,对比 EAS Workflows、Bitrise、Codemagic、GitHub Actions 及其他方案。
中文
复制

团队在构建和发布移动应用时,CI/CD 流程经常出问题。我们见过一些团队,光是构建 iOS 应用并提交到 App Store,就要写 500 多行 YAML 配置。
持续交付一个移动应用需要大量领域知识,编写、维护和改进团队的这套配置,往往变成一份全职工作。
CI/CD 服务行业并不是真正为移动应用而生的。这些服务被做成通用的,什么都能跑,所以它们虽然能用,却不是开发者习惯的那种精心打磨过的工具。
我们不断看到开发者和公司为了完成相似的事情,一遍遍重建堆积如山的复杂 YAML 配置。于是我们做了一个通用 CI/CD,并在上面叠加了移动端专属功能。CI/CD Workflows 用不到 10 行 YAML 配置就能完成构建、提交等操作。它还有一些会随时间变好的 job,比如 iOS/Android 构建缓存,让构建更快(开发者不需要做任何改动)。这项服务能提供的远不止这些,想深入了解可以去看文档或博客。
本文对比 2026 年最主流的移动 CI/CD 方案。我们会讲清楚每个工具擅长什么、哪里不足,以及根据你的团队和技术栈该选哪一个。Expo 在这场竞争中有自己的利益。所以我们有偏向,但其他工具胜出的地方,我们会如实说。
移动 CI/CD 工具该评估什么
在对比具体服务之前,以下是移动团队真正关心的功能:
Apple Silicon 上的构建速度。 iOS 构建是大多数团队的瓶颈。M1 上 20 分钟的构建和 M4 Pro 上 6 分钟的构建,差别就是紧凑的反馈循环,还是开发者切去做别的事情。
代码签名与凭据。 Android 和 iOS 的代码签名可能很麻烦。存储和更新 service JSON 凭据与 provisioning profile 会拖慢整个团队。
构建产物存储。 完成一次构建或 OTA 更新后,你总得把它分享给评审团队,或者提交到应用商店。如何存储、暴露和组织这些产物,是任何持续交付团队都绕不开的功能。
配置复杂度与维护成本。 移动端专属的 job 往往会让配置迅速膨胀,而配置越大,需要维护和优化的面就越多,出 bug 的机会也越多。
成本结构。 各家定价模式不一:按分钟、按构建次数,或者按 credit 计费。标价未必能说明全部问题,有些服务你得用满一个月才知道自己到底要付多少钱。
移动端 CI/CD 对比
EAS Workflows(Expo)
EAS Workflows 是我们(Expo 团队)打造的移动端 CI/CD 服务,内置了构建、提交、OTA 更新、端到端测试等预制 job。
Workflows 的强项:
搭建理想的 CI/CD 流程,就像用乐高拼装高质量、维护良好的积木,每块都恰好满足你的需求。
比如,用 6 行 YAML 就能在 M4 Pro Apple Silicon 上创建一个 iOS 构建。接着可以添加 job 来判断是否真的需要完整构建——如果没有任何原生层改动,典型的 iOS 构建时间就能从约 10 分钟缩短到 2 分钟(甚至几秒)。
EAS Workflows 既提供基础积木,也开箱即用地提供高度优化的步骤。
配置很紧凑。一条完整的 CI 流水线长这样:
name: deploy-to-production
on:
push:
branches: [main]
jobs:
build_ios:
type: build
params:
platform: ios
profile: production
upload_to_app_store:
needs: [build_ios]
type: testflight
params:
build_id: ${{ needs.build_ios.outputs.build_id }}
预制 job 类型都是移动端专属的:build、submit、update、repack、fingerprint、maestro(E2E 测试)、testflight、deploy(Web 托管)以及 slack。每一个都把平台相关的复杂度封装了起来。
不足之处:
EAS Workflows 是为 React Native 和 Expo 项目设计的。如果你做的是 Swift、Kotlin 或 Web 应用,它和其他服务差别不大。它也没有 GitHub Actions 或 CircleCI orb 那样的社区插件可用。
EAS Workflows 可以免费试用。付费方案从每月 $19 起(Starter 计划),包含 $45 构建额度。认真做项目的团队多半需要每月 $199 的 Production 计划,含 $225 构建额度和 2 个并发构建。定价详情。
最适合: 希望有一款专为移动端打造的 CI/CD 服务,用来构建、提交并推送 OTA 更新的 React Native 和 Expo 项目。
Bitrise
Bitrise 同样是一个专注移动端的 CI/CD 平台,支持 iOS、Android、React Native、Flutter 等。
优势:
Bitrise 拥有移动端规模最大的预置 step 库。代码签名向导、自动 provisioning 和可视化 workflow 编辑器,让没有深厚 DevOps 经验的团队也能上手。此外还提供 matrix builds、可复用的 workflow 配置等。近期新增的功能包括 AI 驱动的构建失败摘要,以及尝试自动修复失败构建的 auto-fixer。
运行 iOS 任务时,Bitrise 还提供 M2 Pro 机器(Enterprise 计划则是 M4 Pro),构建和端到端测试跑得很快。
平台支持的框架很多,不限于 React Native。如果你的团队同时开发原生 iOS 应用和 React Native 应用,Bitrise 可以在一个地方把两者都管起来。
不足:
Bitrise 缺少一些常见的内置功能,比如 fingerprinting、repacking,以及用于识别不稳定测试的 Maestro 测试洞察面板。而且只有 Enterprise 计划才能用上最快的 Mac 硬件。
最适合: 移动项目跨多个框架(原生 + 跨平台)、想要成熟生态、可视化 workflow 编辑器和有竞争力价格的团队。
Codemagic
Codemagic 最初是为 Flutter 打造的,后来扩展到支持 React Native、iOS 和 Android 项目。
优势:
Codemagic 提供 M2 和 M4 机器,M4 Pro 和 Max 机器留给更高档位的计划。iOS 的自动代码签名实现得不错。
按量付费模式对小型团队来说可能更划算。他们也提供固定价格方案,用量足够时能大幅降低团队的构建成本。
此外,他们现在支持 CodePush,对于需要寻找服务商来替代 Microsoft 关停的 AppCenter 的团队来说很实用。
不足之处:
不支持通过 fingerprint 和 repack 跳过构建,所以何时需要新构建、何时不需要,都得你自己判断。
适合: 使用 Flutter 应用的团队,或者想要简单直接定价方案的 React Native 团队。
GitHub Actions
GitHub Actions 是使用 GitHub 的团队默认的 CI/CD。它是通用工具,并非专为移动端设计。
做得好的地方:
如果你的代码在 GitHub 上,集成非常顺畅。Marketplace 里有数千个社区维护的 action。对于流水线中非移动端的部分(lint、类型检查、单元测试),GitHub Actions 很难被超越。
不足之处:
iOS 任务运行在较慢的 M1/M2 Pro 机器上,这意味着构建、Maestro 测试等都要花更长时间。
另外,因为 GitHub Actions 是通用 CI/CD,你的构建、更新、测试结果等不会整理在易用的仪表盘里。
还有,我们见过用户在 GitHub Actions 上写 80 到 150 行 YAML,才能做到用我们的 Workflows 服务 6 行 YAML 就能完成的事。
适合: 想把所有东西都留在 GitHub 里、并且不介意在流水线维护上投入的团队。即使你用别的工具做移动端构建,它也适合 CI 中非构建的部分。
CircleCI
CircleCI 是通用 CI/CD 平台,通过 macOS executor 支持移动端。
做得好的地方:
并行和缓存能力强。既然是通用 CI/CD 服务,它就是为运行你所有任务而设计的,不只是移动端任务。为此他们提供高并发额度,方便大型团队同时跑多条流水线。
不足之处:
和 GitHub Actions 一样,你是在一个通用平台之上搭建移动端支持。它们的计费也按 credits 来,所以想算清某一次运行到底花了多少钱,并不容易。
它们也没有为代码签名、应用商店提交或 OTA 更新提供移动端专用的抽象。
最适合: 已经投入 CircleCI、希望把移动端构建加到同一平台上的团队。
移动端 CI/CD 对比表
| 功能 | EAS Workflows | Bitrise | Codemagic | GitHub Actions | CircleCI |
|---|---|---|---|---|---|
| 内置移动端专用 job/step | 是 | 是 | 是 | 否 | 否 |
| iOS job 硬件 | M4 Pro | M2 Pro(Enterprise 为 M4 Pro) | M2 与 M4(顶配方案为 M4 Pro 与 Max) | M1 与 M2 Pro | M4 Pro |
| 应用商店提交 | 内置 job 和提交专用 UI | Steps 库 | 内置 job | 自行编写脚本 | 自行编写脚本 |
| E2E 测试 | 内置 job 和 insights 面板(Maestro) | Steps 库 | 自行编写脚本(Detox 有文档) | 自行编写脚本 | Orbs |
| 配置复杂度 | 低。典型 job 用不到 10 行 YAML。 | 低。带可视化编辑器。 | 低。带可视化编辑器。 | 高 | 高 |
| 智能跳过构建 | 指纹 + repack | 否 | 否 | 否 | 否 |
| 内置 OTA 更新 | 是,支持 EAS Update。 | 是。支持 CodePush。 | 是。支持 CodePush。 | 否 | 否 |
| 起售价 | 免费起步,之后 $19+/月 | 免费起步,之后 $89+/月 | 按量付费,或固定价格 $3990+/年 | 免费,之后 $4-$21/用户/月 + 按分钟计费 | 免费,之后 $15+/月 |
移动端 CI/CD 与 Web CI/CD 的区别
如果你是从 Web 开发转过来的,移动端 CI/CD 会多出几层东西:
代码签名是必须的。 iOS 需要 provisioning profile 和分发证书。Android 需要 keystore。在团队中管理这些东西并保持更新,要占用团队的时间。
iOS job 需要 macOS 硬件。 这一点绕不过去。每个 iOS 构建都需要一台 macOS worker。相比基于 Linux 的 Web 构建,这让 CI 又贵又慢。
应用商店提审本身就是一步部署。 Web 部署通常只是推送到 CDN。移动端部署则涉及元数据、截图、审核指南和审核队列。把这套流程自动化,再加上用 OTA 更新来加速 JavaScript 层面的改动,能省下大量时间。
要让团队预览改动,就得先出构建。 给 Web 应用生成一个预览链接让团队评审,相对简单。移动端就不一样了:你得创建构建,或者发 OTA 更新,或者两者都做。此外,还得把团队成员加进 Play Console/TestFlight,或者用 ad-hoc 描述文件预先注册他们的设备。这些额外的步骤累加起来,抬高了团队的沟通成本。
用 fingerprint 和 repack 跳过不需要的构建
值得一试的一个做法是基于 fingerprint 的构建跳过,EAS Workflows 原生支持这一功能。大多数提交只改动了项目的 JavaScript 层,原生依赖并没有变化。原生层没变,就可以跳过完整构建,直接在之前的原生二进制包上重新打包新的 JavaScript bundle。
正是这个工作流让不少 GitHub Actions 用户转投 EAS Workflows。我们有些客户原本根本没打算换掉自己的 CI 流水线,现在却在用 Workflows,就是因为 fingerprint 和 repack 带来的效率提升太明显。
一次 repack 大约 2 分钟,而完整构建要 10–15 分钟。对一个每天跑 20 次构建的团队来说,这相当于每天省下大约 3–4 小时的构建时间。
Infinite Red 为许多客户落地了这套方案,把 CI 时间砍掉了一半。
jobs:
fingerprint:
type: fingerprint
get_build:
needs: [fingerprint]
type: get-build
params:
fingerprint_hash: ${{ needs.fingerprint.outputs.ios_fingerprint_hash }}
platform: ios
repack:
needs: [get_build]
if: ${{ needs.get_build.outputs.build_id }}
type: repack
params:
build_id: ${{ needs.get_build.outputs.build_id }}
build:
needs: [get_build]
if: ${{ !needs.get_build.outputs.build_id }}
type: build
params:
platform: ios
profile: production
上面的工作流会查找原生层匹配的已有构建,一旦找到,就自动创建一个新构建——但只构建 JavaScript 层。如果代码改动涉及原生层,它会回退到完整构建。其他移动端 CI/CD 工具都没有内置这一能力。
如何为你的应用选择移动端 CI/CD 服务
选择取决于几个因素:项目的框架、你是否已有在用的 CI 平台,以及你能在 CI/CD 流水线上投入多少开发时间。
如果你用 React Native/Expo 开发,希望一个服务就覆盖构建、OTA 更新、E2E 测试、fingerprint 与 repack 加速以及应用商店提交,选 EAS Workflows。
如果你同时发布原生和跨平台应用,想要最丰富的 step 库,以及一个不需要深厚 DevOps 经验、团队就能上手的可视化编辑器,选 Bitrise。需要注意,最快的硬件(M4 Pro)仅限 Enterprise 版。
如果你用 Flutter 开发,并且能接受用 CLI 驱动的 CodePush 做 OTA,选 Codemagic。
如果你的代码和其余 CI 已经在 GitHub 上,而且你宁愿自己维护移动端流水线,也不想再引入一家供应商,选 GitHub Actions。前提是你能接受 macOS 按分钟计费,以及 80–150 行 YAML。
注意:EAS Workflows 可以和 GitHub Actions 一起使用。这在我们的客户中很常见,通常是团队看到 fingerprint + repack 这个用例的价值之后开始采用的。
如果你的组织已经用 CircleCI 跑后端或 Web,希望移动端也放在同一平台、共用同一份 credit 池,并且需要为大型团队提供强并行能力,选 CircleCI。
从 EAS Workflows 开始
运行 npx eas-cli@latest workflow:create 创建你的第一个 workflow。
然后运行 eas workflow:run workflow-file-name.yml
示例 workflow 覆盖了常见模式:PR 预览构建、生产部署、定时构建和 Maestro E2E 测试。
如果有疑问,可以查看我们的文档,或者到 Expo Discord 的 #eas 频道与其他开发者交流,团队和社区都会提供帮助。我们还提供了一个 CI/CD Workflows Skill,可以帮人们为 Expo 项目编写和修改 YAML 文件。
CI/CD 常见问题
移动应用开发中的 CI/CD 流水线是什么?
CI/CD 流水线把构建、测试和部署移动应用的过程自动化。你推送代码后,流水线会为 iOS 和 Android 编译应用、运行测试,还能直接提交到 App Store 或 Google Play。没有 CI/CD,这些步骤全靠手动,既慢又容易出错。
移动端 CI/CD 与 Web 端 CI/CD 有何不同?
有三点让移动端更难。第一,iOS 构建需要 macOS 硬件,CI 基础设施因此变得昂贵。第二,两个平台都强制要求代码签名(iOS 用 provisioning profile,Android 用 keystore)。第三,部署要经过应用商店审核,而不是发布到 CDN。
搭建移动端 CI/CD 流水线最大的挑战是什么?
代码签名和证书管理最让人头疼。其次是共享 macOS runner 上缓慢的构建速度、平台专属构建配置的管理,以及自动化应用商店提交的复杂度。使用 EAS Workflows、Bitrise 或 Codemagic 的团队基本能避开这些问题,因为平台已经替你处理好了。
移动应用有免费的 CI/CD 工具吗?
GitHub Actions 对公开仓库免费(基础 M1/Intel macOS 机器),私有仓库也有免费额度。EAS Workflows、Bitrise 和 Codemagic 都提供免费套餐,但构建分钟数有限。正经项目要准备好每月花 19–299 美元,具体取决于平台和构建量。
React Native 或 Expo 应用最适合用什么 CI/CD?
EAS Workflows 专为 React Native 和 Expo 打造。它用一份 YAML 配置处理构建、OTA 更新、应用商店提交、repack 与 fingerprinting,以及 E2E 测试,代码签名也由它托管。Bitrise 和 Codemagic 同样支持 React Native,但要搭建同样的流水线,配置量更大。
Android 和 iOS 的 CI/CD 工作方式有何不同?
iOS 构建需要装有 Xcode 的 macOS,以及 Apple 特有的代码签名(provisioning profile、distribution certificate)。Android 构建跑在 Linux 上,用 Gradle,签名靠 keystore。多数移动端 CI/CD 工具会并行跑两个平台,以缩短整条流水线的耗时。