Bitrise 自动化发布 Flutter 应用终极指南(一)

引言

几个月前就想写一期关于在Bitrise上如何实现Flutter应用发布自动化的文章,但拖延症犯了,好在没有对别人做过什么承诺。

自动化的好处就不必多说了,比如说方便管理密钥、避免密钥泄露等等。我觉得最重要的是解放双手,不用重复做一些重复环节,如打包apk、上传到Google Play等等,搞不好某个环节还容易操作失误,还有一点就是不必非得找开发人员打包之类的。太多了不说了。

欢迎关注我的微信公众号:OpenFlutter,感谢

CI/CD的工具有很多,但今天要说的是Bitrise

为什么要用Bitrise

简单说一下Bitrise

Bitrise是一个专注于移动端DevOps的CI/CD平台。

它提供了针对移动端CI/CD做了优化,并提供了易用的界面,相对Jenkins来说,确实好太多了。可以说Bitrise提供一站式,甚至傻瓜式的CI/CD体验。

本文要分享的是主要是Flutter应用通过Bitrise实现发布自动布(我指的是发布到Google PlayAppstore)。

当然本文也需要一定的基础,比如说:

  • 至少你得会在Bitrise上创建一个CI项目
  • 知道什么是webhook
  • 知道Google Play的service account如何创建
  • 知道常见的flutter 命令 等等,不过不会也没关系,可以选择硬着头皮看完本文。

Bitrise相关的一些概念

我认为Bitrise的关键概念有三个,分别是steps(步骤)workflows(工作流程)pipelines(管道)。除此之外,我还简单说一下环境变量。

下面我先简单介绍一下三个概念。

Steps

stepsBitrise的心脏,也就是核心中的核心。一个Step,说人话就是一个构建任务,比如说Git Clone这一步就是要把你的代码仓库克隆下来。

一个 Step(步骤) 包含执行构建任务的代码。你可以配置定义该任务的输入和参数,并查看和重用该 Step 生成的输出。重用输出意味着另一个 Step 可以将其作为其某个输入的值来使用。

Step(步骤) 是以YAML格式定义的,代码使用 BashGo 编写。

这意味你可以直接通过编辑yaml文件修改CI/CD配置,当然我不建议你这么玩,因为GUI更好呗

Bitrise通过StepLib提供了丰富的Steps,大部分情况都可以满足我们的日常需求,如果满足不了,那就自己写shell啥的吧。

每个Step可以有输入或者输出,这个很重要。

  • 输入:意味着你可以配置你的Step,比如说Keystore的位置。输入项也可以是一些环境变量,这个后面会讲到。
  • 输出:这个其实也挺重要的,一些step会告诉你他的一些产出物放在哪个目录里,只有了解了这些你才可以通过脚本获取这些产出物。

我们以Flutter Test这个Step为例吧:

比如,你可以更改Project的存储位置。

比如,你可以在$BITRISE_FLUTTER_COVERAGE_PATH这个位置获取到测试报告。

细心的朋友已经看到上面有截图是When to run,没错,你可以在任何给定的 Workflow中启用或禁用一个Step ,你也可以为步骤设置执行条件。你可以直接在自己的电脑上使用 Bitrise CLI 来完成,或者通过Workflow Editor(工作流程编辑器)中的 bitrise.yml 标签页进行设置。

我们主要使用 run_if 表达式来实现这些功能。请查看示例,了解可能的模板表达式:run_if 表达式示例

你也可以在 GitHub 上查看这些示例:模板表达式示例

run_if 可以是任何有效的 Go 模板

一个 run_if 表达式可以是任何有效的 Go 模板 ,只要它的求值结果为 truefalse(或者任何字符串表示,例如 Truetyesy 都会被视为 true)。如果模板求值结果为 true,则该Step将运行,否则它将不会运行。

Step中还有一个概念就是Step Bundles,顾名思义,就是把一组Step封装到一起了就是一个Step Bundle:

Workflow

一个Workflow是由一系列 Steps(步骤) 组成的。当一个项目的构建运行时,每个 Step 将按照在 Workflow 中定义的顺序执行。工作流程可以通过两种方式创建、定义和修改:

  1. 使用 bitrise.io 上的图形化工作流程编辑器,或者在你自己的设备上使用离线版本。
  2. 直接编辑项目的 bitrise.yml 文件。

最终,这两种方法都是在修改 bitrise.yml 文件------只是工作流程编辑器是一种更友好的操作方式!

默认情况下,一次单独的构建就是一个 Workflow。但你也可以将多个Workflow连接起来,让它们依次运行,也可以触发多个 Workflow 同时运行。

Workflow 还可以被组织成 Pipelines 。一个 Pipeline 由多个 Stage(阶段)组成,而每个 Stage 又包含一个或多个并行运行的 Workflow。

总之,我们的发布流程就是在workflow上完成的。

创建一个Workflow:

Pipelines

一个 Bitrise Pipeline 是我们 CI/CD 配置的顶层。管道可用于组织整个 CI/CD 流程,并设置高级配置,支持多个不同的任务并行或按顺序运行。

没用过也没实际应用场景,所以不做太多叙述,我只知道我们当前这个付费计划中还不配使用Pipelines

环境变量

环境变量可以从两个维度区分,即保密与非保密。

保密的叫Secrets,这意味着他们是被加密存储的,一旦存成Secret,那你在log中是看不到对应值的,如果你把标记为Protected,那意味你再也看不到他的真实值了。

另一种的环境变量就是普通的环境变量(Env Vars)了,也是有两种,一种是项目级别的,一种是workflow级别的。顾名思义,Project级别的变量是对整个Project都好用的变量,workflow级别的只针对当前的workflow好用。

好戏开场了

说了这么多,总算正式开场了。

首先准备一下Play Store和 App Store Connect配置。我假设你已经会配置Googe service accountApple service connection

申请完以后,Google 会给你的xxx.json文件,而Apple会给的xxx.p8文件,还有对应的Name,Issuer IDKey ID,反正把一堆东西扔到下面的步骤里就好了。

不过,为了保证程序正常运行,需要注意的Google Service account需要以下权限:

  • Access level: View app information.
  • Release management: Manage production releases, manage testing track releases.
  • Store presence: Edit store listing, pricing & distribution.

由于Play Store是英文的,我就不翻译了。

同样的,iOS的API key也有一些要求,这样方便Bitrise管理签名:

  • 一定要是Teams Key

以下的配置都是基于Bitrise全自动化作业,即自动化管理签名,分布。如果想手动配置签名的话,自己研究吧。

Bitrise

你得知道我们接下来配置的东西在Workpace settings=>Integrations里。

Apple的API Key申请可以参照官方文档

上面两步配置完了以后,我们需要回到Project setting=>Integrations=>Store中,把对应的设置勾选上。

Apple

太累了,先写到这里,也不知道有没有人看,要是没人看就不写了,有人看了再说。

相关推荐
代码哈士奇5 小时前
使用vite+vue3+ElementPlus+pinia搭建中后台应用-前端
前端·vue3·管理系统·vite7
亿元程序员5 小时前
当一个Cocos博主被问有没有Unity教程...
前端
lkx097885 小时前
笔记C++语言,太焦虑了
前端·c++·笔记
勇敢di牛牛6 小时前
【css】快速上手Flexbox布局(理论讲解+实战)
前端·css3
2501_938780286 小时前
服务器 Web 安全:Nginx 配置 X-Frame-Options 与 CSP 头,防御 XSS 与点击劫持
服务器·前端·安全
IT_陈寒6 小时前
Java 17 新特性实战:这5个隐藏功能让你的代码效率提升50%
前端·人工智能·后端
艾小码6 小时前
2025年组件化开发这样做,效率提升300%
前端·javascript
驭风少年君13 小时前
《搭建属于自己的网站之网页前端学习》基础入门
前端·学习
刘一说14 小时前
深入理解 Spring Boot 嵌入式 Web 容器:从原理到性能调优
前端·spring boot·firefox