Fastlane自定义CI/CD部署咨询:基于Docker的Android构建实例参考
Android 场景下基于Fastlane的CI/CD落地配置实例
镜像适配调整
你找到的官方Fastlane Dockerfile默认包含多端构建依赖,仅用于Android场景时可做定向裁剪:
- 移除iOS相关的ruby依赖包、Xcode命令行工具相关配置,减少镜像体积
- 预安装指定版本的Android SDK、build-tools、platform SDK、NDK(原生开发场景需要)
- 配置jks签名文件的挂载路径,敏感信息不内置到镜像中
核心Fastfile配置示例
以下是已经在生产环境落地的Android构建发布lane配置:
default_platform(:android) platform :android do desc "构建Beta测试包并发布到内部测试平台" lane :beta do # 清理历史构建缓存 gradle(task: "clean") # 基于Git提交记录自动迭代版本号(可选) increment_version_code( gradle_file_path: "./app/build.gradle" ) increment_version_name( gradle_file_path: "./app/build.gradle" ) # 注入签名配置构建Release包,签名信息从CI加密环境变量读取 gradle( task: "assembleRelease", properties: { "android.injected.signing.store.file" => ENV["ANDROID_KEYSTORE_PATH"], "android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PWD"], "android.injected.signing.key.alias" => ENV["ANDROID_KEY_ALIAS"], "android.injected.signing.key.password" => ENV["ANDROID_KEY_PWD"] } ) # 上传产物+发送通知,可根据实际使用的平台替换对应的action upload_to_play_store(track: "beta") slack(message: "Android Beta包已发布,版本号:#{lane_context[SharedValues::VERSION_NAME]}") end desc "构建生产环境正式包" lane :production do gradle(task: "clean") gradle( task: "bundleRelease", properties: { "android.injected.signing.store.file" => ENV["ANDROID_KEYSTORE_PATH"], "android.injected.signing.store.password" => ENV["ANDROID_KEYSTORE_PWD"], "android.injected.signing.key.alias" => ENV["ANDROID_KEY_ALIAS"], "android.injected.signing.key.password" => ENV["ANDROID_KEY_PWD"] } ) # 正式发布前增加人工审批卡点 puts "请确认版本信息无误后继续执行发布" end end
CI流程配置规范
- 触发规则:PR提交时仅执行lint检查、单元测试验证;main分支合并、版本tag推送时自动触发Beta构建
- 缓存配置:开启Gradle缓存、Ruby依赖缓存,可将单次构建耗时缩减60%以上
- 权限控制:所有敏感信息(签名密码、平台token等)全部存储在CI系统的加密环境变量中,禁止明文写在配置文件里
- 异常告警:配置构建失败自动发送告警到团队协作群,附带错误日志快照方便快速排查
落地注意事项
- 提前在Docker镜像中固定所有依赖版本(Fastlane版本、Gradle版本、Android build-tools版本),避免依赖版本自动迭代导致构建不稳定
- 构建产出的APK/AAB包同步备份到内部对象存储,至少保留3个月的构建历史方便问题回溯
- 生产环境发布流程必须配置人工审核卡点,确认版本变更范围、测试报告后再执行最终发布操作
内容的提问来源于stack exchange,提问作者Chris G.
相关产品推荐
相关产品推荐

