Android 发布时间从半天压到十分钟:移动端 DevOps 与自动化部署实战
【免费下载链接】android_guidesExtensive Open-Source Guides for Android Developers项目地址: https://gitcode.com/gh_mirrors/an/android_guides
本文基于 android_guides 仓库,讲解 Android 持续交付与移动端 DevOps 实战:构建、签名、分发、回滚。
去年某周五发版前一晚八点,我还在自己电脑上手动跑构建、换签名证书、给三个渠道一个个打包装压缩,证书密码要对着备忘录找;某个渠道包版本标错了,全部重来。那天起我把整条流程搬进流水线。这篇文章就是团队落地移动端 DevOps 的完整过程,以及第一次上线时踩过的坑,没有银弹,只有一条能跑通的路。
手动发版为什么拖垮团队
手动发版不是不能做,问题在于每次发版的成本跟「参与人数 × 渠道数」成正比,最疼的是三处:签名证书和渠道配置只在一台个人电脑上,人休假就没人能发版;每一步手动操作都可能出错,渠道越多出错概率越高;出了事故说不出是哪一步引入的,只能靠猜。
把这些步骤交给流水线后,发版动作本身会缩成「点一次按钮,等一条通知」。
构建:先钉死环境,再谈自动化
Android 持续交付的第一原则是 CI 机器的环境和本地完全一致。我们第一条流水线连挂三次,全是环境问题:本地 JDK 8,CI 容器还是 7,Gradle 版本差一个小版本。后来的做法有三条:Gradle Wrapper 提交进仓库锁构建版本;targetSdk 与 JDK 版本写死在构建脚本里;CI 机器只安装构建真正需要的 SDK 组件。
用 SDK Manager 核对已安装组件,让 CI 容器的清单和本地一一对应。
环境对齐之后,Jenkins 流水线的第一个任务就是一条命令:./gradlew clean assembleRelease,产物丢进固定目录,交给下一步。
🔐 签名:密钥与多渠道打包怎么接进流水线
签名证书是全流水线最敏感的资产,我们的铁律是 keystore 和密码永不进仓库:证书文件放在 CI 服务器的 secrets 里,构建时以环境变量注入,signingConfigs块只写变量名。证书有有效期,我们在构建步骤里加了一步有效期校验,临期就让流水线直接失败,等于提前一个月收到提醒。
多渠道打包用 Gradle 的 productFlavors:每个渠道一个 flavor,流水线一次构建全部渠道,产物统一命名为app-{channel}-{versionName}-{buildNumber}.apk。靠这个命名,后面的分发和回滚才能靠文件名自动驱动。
分发:把渠道包当成标准品
构建完成后,流水线自动做两件事:APK 和构建日志上传对象存储,保留最近 30 天的产物;生成下载页推给发版群,更新日志从提交记录里自动拉取。渠道包自动分发不需要额外系统,就是命名规范加一个上传脚本;命名一旦混乱,后面所有自动化分发都会失效。
⏱️ 回滚:发布失败后 5 分钟恢复的策略
回滚方案要在发版之前设计好。我们的策略分三层:产物全量保留,历史构建都留在对象存储上,回滚就是把上一版下载链接重新挂回;小批量先行,走内网群、5% 灰度、全量的节奏,每一层都有暂停按钮;高风险逻辑挂服务端配置开关,出问题时先关开关,再决定要不要真正回滚版本。这样从「发现问题」到「用户拿到旧版本」可以压在 5 分钟以内。
监控:用发版后的数据决定下一步
发版没监控等于没发完。我们把三类数据接进流水线报告:崩溃率相对上一版本的变化、发版下载转化、应用市场的用户反馈。每次版本发布后流水线自动生成一份对比报告,崩溃率上升超过 0.1 个百分点就直接 ping 发版群。监控数据不是用来汇报的,是用来决定下一轮迭代做什么的。
🕳️ 我们真实踩过的三个坑
第一个坑是「本地能跑」:本地依赖解析正常,CI 机器解析失败,最后定位是本地 SDK 组件和容器不一致。
第二个坑是证书密码过期:一次发版卡在签名环节,证书没人提前看过有效期,此后构建里固定加有效期校验。第三个坑是命名失控:有人手动改过 APK 文件名,导致分发脚本找不到文件,后来改成文件名只能由流水线生成,人不许动。
工具链速查
| 环节 | 常用工具 | 干什么用 |
|---|---|---|
| CI 服务器 | Jenkins、GitLab CI | 触发构建、任务编排 |
| 构建 | Gradle Wrapper | 锁定构建工具版本 |
| 签名 | apksigner、CI secrets | 管理 keystore 与注入证书 |
| 分发 | 对象存储、CDN | 保留产物、下发下载链接 |
| 回滚 | 配置开关、灰度发布 | 快速恢复旧版本 |
| 监控 | Crashlytics、Firebase | 崩溃与性能数据 |
仓库里 SAMPLES.md 附了一份示例工程清单(含单元与集成测试 Demo),完整资料可用git clone https://gitcode.com/gh_mirrors/an/android_guides拉取。
流水线不用一步到位:先把「构建 + 签名」两段自动化,再逐层加分发、回滚和监控;当一次发版不再让任何人紧张时,这套移动端 DevOps 就算落地了一半。
【免费下载链接】android_guidesExtensive Open-Source Guides for Android Developers项目地址: https://gitcode.com/gh_mirrors/an/android_guides
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考