持续集成环境概述
先聊聊CI是什么。持续集成,说白了就是让代码提交后自动触发一系列检查流程,确保你的改动不会把整个项目搞崩。我刚入行那会儿,项目全靠手动合并、手动部署,每次发版都心惊胆战的。后来上了CI,发现问题能提前堵住,整个人都轻松了。
CI的核心逻辑:
- 代码提交到共享仓库后自动触发
- 自动化构建和测试
- 快速反馈:失败时立刻通知团队
- 解放手动操作,减少人为失误
你想想看,一个几十人的团队,每个人都在修不同的模块,如果每次都要等别人手动跑一遍测试,效率低不说,还容易漏掉边缘情况。CI就是帮你自动跑这遍,把问题暴露在萌芽期。
主流CI平台,我挨个说说
市面上CI工具不少,但我个人经历中打交道最多的就三个:Jenkins、GitLab CI、GitHub Actions。每个都有它的脾气,我们一个个拆开来看。
Jenkins
老牌选手了,基本任何环境都能装。我在一个政府项目里用过Jenkins,当时需要对接一堆老旧系统,Jenkins的插件生态确实帮了大忙。不过维护起来有点重,需要单独搭建服务器,配置也偏繁琐。
- 优点:高度可定制,插件多,支持任意语言和工具
- 缺点:需要自己管服务器,初始配置成本高
- 典型场景:企业内部复杂环境,有专用运维团队
我的经验:如果团队只有三两个人,别折腾Jenkins。选更轻量的方案,否则光调插件就能耗掉你一周时间。
GitLab CI
和GitLab深度集成,.gitlab-ci.yml文件定义流水线。我个人很喜欢它的Stage和Job概念,清晰直观。有一回我帮客户迁移一个Android项目,从Jenkins搬到GitLab CI,只花了一天就把所有任务串起来了。
- 优点:与代码仓库一体化,配置简单,内置Docker支持
- 缺点:Runner需要单独部署,大型项目并发需付费
这里插一句,GitLab CI的注册Runner环节偶尔会踩坑——记得检查网络权限和Runner标签是否匹配。
GitHub Actions
这几年最火的CI方案了。我在几个开源项目里大量用Actions,直接和GitHub仓库绑定,生态丰富。一个workflow文件就能搞定构建、测试、发布。
- 优点:无需额外服务器,市场action多,社区活跃
- 缺点:免费额度有限制,私有仓库有分钟数限制
举个例子,一个安卓模拟器测试的workflow配置大概长这样:
name: Android CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up JDK 17
uses: actions/setup-java@v3
with:
java-version: '17'
- name: Build with Gradle
run: ./gradlew build
- name: Run tests on emulator
run: ./gradlew connectedCheck
嗯,这里要注意——macOS Runner上跑模拟器更快,但免费额度有限。我建议先用Linux跑无头模式,等PR合入前再用macOS跑全量测试。
CI工作流程拆解
不管用哪个平台,核心流程其实都大同小异。我把它抽象成下面这张图,你看一眼就明白了。
每个环节都可以根据项目需要加一些定制动作。比如安卓模拟器测试,你可以在测试阶段拆出「单元测试」和「模拟器测试」两个并行job,节省总耗时。
各平台工作流对比
为了方便决策,我把三个平台的关键差异列成表格,供你参考。
| 维度 | Jenkins | GitLab CI | GitHub Actions |
|---|---|---|---|
| 配置方式 | Web UI + Jenkinsfile | .gitlab-ci.yml | .github/workflows/*.yml |
| 托管方式 | 自托管(需服务器) | 自托管Runner / SaaS | Github托管 + 自托管Runner |
| Android模拟器支持 | 需手动配置KVM/ADB | 可用Docker-in-Docker + 模拟器镜像 | 官方market有现成action |
| 学习成本 | 高 | 中 | 低 |
| 适合团队 | 大型企业、有专职运维 | 中小团队、DevOps文化 | 初创团队、开源项目 |
我曾经踩过的坑: 有一回在GitLab CI上跑Android模拟器,没注意Runner的机器不支持嵌套虚拟化,结果模拟器死活起不来。折腾了两天才发现是底层KVM没开。后来我每次配置前都先检查一下宿主机的egrep -c '(vmx|svm)' /proc/cpuinfo,这个习惯一直保留到现在。
选型怎么定?
我给的建议很简单:如果你是个人项目或开源项目,直接上GitHub Actions,零成本上手。如果公司已经用GitLab做代码管理,别犹豫,就用GitLab CI,集成度高。Jenkins嘛……除非你团队里有专门的人维护,或者有遗留系统必须对接,否则尽量避开。
好了,这部分内容差不多够你用。记住,CI只是个工具,核心还是流程能不能跑通。下一环节我们会具体讲安卓模拟器在CI环境下的配置细节,这里先把基础打牢。