跳到主要内容

CI/CD 实践

场景

团队协作中频繁出现"合并代码后编译失败"、"测试包版本不对"、"发布流程手动操作出错"等问题。

方案

1. CI Pipeline

# .github/workflows/ci.yml
name: Android CI
on:
push:
branches: [main, develop]
pull_request:
branches: [main]

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Lint
run: ./gradlew lintDebug
- name: Unit Test
run: ./gradlew testDebugUnitTest
- name: Build
run: ./gradlew assembleDebug
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: debug-apk
path: app/build/outputs/apk/debug/app-debug.apk

2. CD Pipeline(发布流程)

阶段说明
Tag 触发v1.x.x tag 触发发布流程
Build ReleaseassembleRelease / bundleRelease
签名GitHub Secrets 存储 keystore
上传Google Play / 华为应用市场 / 蒲公英
通知企业微信 / Slack 通知发布结果

3. 最佳实践

实践说明
Gradle CacheCI 缓存 ~/.gradle 目录
并行 JobLint、Unit Test、Build 可并行
版本号自动化从 Git tag 读取 versionName
Code CoverageJacoco 生成覆盖率报告
PR 门禁Lint Error / Test Failure 阻止合并
// build.gradle.kts — 从 CI 环境变量读取版本号
android {
defaultConfig {
versionCode = System.getenv("VERSION_CODE")?.toIntOrNull() ?: 1
versionName = System.getenv("VERSION_NAME") ?: "1.0.0-dev"
}
}

面试答题要点

  1. CI:每次 PR 自动跑 Lint + Test + Build
  2. CD:Tag 触发 Release Build + 自动上传
  3. Gradle Cache 加速 CI 构建
  4. PR 门禁确保代码质量

相关链接