使用 Codemagic 持续部署 Flutter 应用
前言
持续集成和持续部署能够自动化应用开发的测试,构建和部署过程,如果在应用开发初期解决了这个问题无疑提升应用的开发,交付效率。
什么是 Codemagic
Codemagic 是一个为 Flutter
项目以及其它移动端项目提供 CI/CD 服务的平台。
可以使用 Github 账号注册登录,登录后它会要求获得你仓库的读/写权限,然后在 apps 页面显示你需要进行构建的项目。
为什么使用 Codemagic
好的 CI/CD
有助于更快地构建,测试以及部署发布应用。在 Flutter
的官方文档 Flutter 里的持续部署 里介绍了使用 fastlane
工具进行本地部署以及如何将 fastlane
整合到 Travis
,Cirrus
,Bitrise
等持续交付的服务中,但是对于 Flutter
项目来说最方便的 CI/CD
服务应该还是 Codemagic
,它可以直接在网页上就配置出完整的应用交付流程。
如何使用
选择需要构建的 Fluter
项目,点击 Start your first build
按钮,创建一个工作流程 Workflow
。
一个 Workflow
指的是每次构建要做的任务,如执行构建,测试以及发布任务。
对于 Flutter
项目可以在网页上配置或使用 codemagic.yaml
配置文件,其它项目只能使用 codemagic.yaml
配置。
一个 Workflow
由以下几个部分组成
Build triggers
–> 指定的构建分支和触发构建的时机
Environment variables
–> 设置构建时的环境变量
Dependency caching
–> 设置构建时的依赖缓存文件目录,加快构建速度
Test
–> 执行应用的单元,集成和部件测试,以及静态代码分析
Build
–> 配置应用构建时的 Flutter 版本,构建目标,构建参数
Publish
–> 选择需要发布应用的目标,这里我选择了Google play
代码签名
要将应用发布到 Apple store
或者 Goople play
上就必须对你的应用进行代码签名,代码签名目的是为了识别谁开发了该应用程序,并确保该应用程序的所有更新均来自这个人。
对于 Android 来说有两种签名:发布签名和上传签名。最终用户下载的 .aab/.apk
文件使用发布签名。上传签名提供给开发者上传到 Google Play
商店的认证。上传后,Google Play
会重新使用发布签名对 .aab/.apk
文件签名。
在配置 Workflow
时,我选择发布到 Goople play
所以需要对 Android 应用进行代码签名,有以下两种方式进行签名,选择其一即可。
签名后需要做的是把签名信息存到工作流程 Workflow
内,Android code signing。
创建 Service Account
Service Account
是给 CI/CD
平台发布构建后应用用的,根据指引创建 Setting up a service account in Google Play Console,创建后需做的上传你的凭证 JSON 文件
注意
- 在使用
CI/CD
服务前首先要人工的上传应用到Google Play
一次。 - 每次上传到
Google Play
的应用构建版本不能重复,否则会遇到这样一个问题
1 | Google Play responded with: APK specifies a version code that has already been used. |
搜索一番后发现问题是应用构建的版本号重复,需要更新 pubspec.yaml
文件的 version
字段的值,详细说明可以查阅这篇文章 更新应用版本号
- 上传
Google Play
需要添加一个环境变量FCI_KEYSTORE_FILE
,这个变量需要用 base64 encode 一下,需要用到的命令是
1 | base64 input-file-path -o output.txt |
总结
使用 Codemagic
发布 Flutter 应用的流程大致如下
- 选择构建项目
- 配置构建流程
- 进行代码签名
- 创建 Service Account
- 触发构建