cover

使用 Github Actions 持续发布 Flutter 应用

前言

Github Actions 是 Github 提供的一种 CI/CD 服务,如果你的 Flutter 应用代码放在 Github 上,那就可以使用这个服务自动化进行应用测试,构建,发布工作了。

先说下 Github Actions 几个核心概念,感觉还是挺易懂的,不得不说 Github Actions 的设计很厉害 😄

Workflow file

配置工作流程的文件,YAML 格式,放在项目根目录的 .github/workflows 目录内

Workflow

由配置文件定义的一个工作流程,由一系列的的任务组成

Job

工作流程中的一个任务,由一系列的步骤 Step 组成

Step

一个任务其中的一个执行步骤,执行一些命令或者 Action

Action

一个步骤中的具体要进行操作,如拉取代码,发送请求等,可以使用自己或社区共享的 Action

Event

触发工作流程运行的事件,比如推送代码到仓库 push,创建一个版本标签 tag 等

Artifact

工程流程执行时产生的东西

Runner

就是工作流程运行的地方,Github 提供的服务器

示例

下面用一个示例项目来说明如何使用 Github Actions 发布 Flutter 应用,先放成果 地址

main.yml

  1. 首先创建一个 Flutter 项目
1
flutter create flutter_github_actions
  1. 添加一个配置文件 .github/workflows/main.yml

main.yml

  1. 配置工作流程,将代码推送到 Github
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# main.yml

# 工作流程的名字
name: Test, Build and Release apk

# 工作流程触发的时机,这里是当一个版本标签推送到仓库时触发
on:
push:
tags:
- v*

# 这个工作流程需要执行的任务
jobs:
process:
name: all process
runs-on: ubuntu-latest
# 这个任务的步骤
steps:
# 拉取项目代码
- uses: actions/[email protected]
# 建立 java 环境
- name: Setup Java JDK
uses: actions/[email protected]
with:
java-version: "12.x"
# 建立 Flutter 环境
- name: Flutter action
uses: subosito/[email protected]
with:
channel: "stable"
flutter-version: "1.12.x"
# 下载项目依赖
- run: flutter pub get
# 执行测试
- run: flutter test
# 打包 APK
- run: flutter build apk --release
# 发布到 Release
- name: Release apk
uses: ncipollo/[email protected]
with:
artifacts: "build/app/outputs/apk/release/*.apk"
token: ${{ secrets.GITHUB_RElEASE_TOKEN }}
  1. 创建 Token

要把构建出来的 apk 发布到仓库的 Release,还需要创建一个 Personal access token 提供发布 action 访问和操作代码仓库的权限,注意不要关闭浏览器标签,因为这个 token 只有在第一次创建的时候可见。

token

  1. 添加环境变量

最后为了能在工作流程中创建的 token,需要在仓库的 secrets 里添加一个环境变量 GITHUB_RElEASE_TOKEN 来储存 token 值

secrets

  1. 触发构建

最后创建一个版本标签,推送到仓库触发工作流程

1
2
3
git tag v1.0.0

git push --tag

然后就可以在仓库的 Actions 里面看到正在运行的工作流程了

workflow

总结

总结一下就是以下 4 个步骤

  1. 创建一个工作流程的配置文件 .github/workflows/main.yml
  2. 创建一个 Personnal access token
  3. 在项目的 serect 里面添加一个环境变量 GITHUB_RElEASE_TOKEN
  4. 推送一个版本标签🏷️,触发工作流程

之后就可以在每次发布标签后自动发布了

更新

构建 Web 应用,发布到 Gihub Pages

1
2
3
4
5
6
7
8
9
10
11
12
# 启用 Flutter web
- name: Enable flutter web
run: flutter config --enable-web
# 构建 web 应用
- name: Build Web App
run: flutter build web
# 部署到 Github Pages
- name: deploy
uses: peaceiris/[email protected]
with:
github_token: ${{ secrets.TOKEN }}
publish_dir: ./build/web
知识共享许可协议
← 如何使用 Gitlib 持续发布 Flutter 应用 MySQL 入门笔记 📒 →