Github Action实现Android自动打包并发布apk
Github Action实现Android自动打包并发布apk
Rookie_lGithub Action介绍
一、Github Action 是什么?
是 Github 推出的持续集成工具
二、持续集成是什么?
简单说就是自动化的打包程序——如果是前端程序员,这样解释比较顺畅:
每次提交代码到 Github 的仓库后,Github 都会自动创建一个虚拟机(Mac / Windows / Linux 任我们选),来执行一段或多段指令(由我们定),例如:
- npm install
- npm run build
三、Yaml 是什么?
我们集成 Github Action 的做法,就是在我们仓库的根目录下,创建一个 .github 文件夹,里面放一个 *.yaml 文件——这个 Yaml 文件就是我们配置 Github Action 所用的文件。
四、Github Action 的使用限制
- 每个 Workflow 中的 job 最多可以执行 6 个小时
- 每个 Workflow 最多可以执行 72 小时
- 每个 Workflow 中的 job 最多可以排队 24 小时
- 在一个存储库的所有 Action 中,一个小时最多可以执行 1000 个 API 请求
- 并发工作数:Linux:20,Mac:5(专业版可以最多提高到 180 / 50)
五、什么是 Workflow?
Workflow 是由一个或多个 job 组成的可配置的自动化过程。我们通过创建 YAML 文件来创建 Workflow 配置。
5.1 如何定义 Workflow 的名字?
name
Workflow 的名称,Github 在存储库的 Action 页面上显示 Workflow 的名称。
如果我们省略 name,则 Github 会将其设置为相对于存储库根目录的工作流文件路径。
1 | name: Greeting from Mona |
5.2 如何定义 Workflow 的触发器?
on
触发 Workflow 执行的 event 名称,比如:每当我提交代码到 Github 上的时候,或者是每当我打 TAG 的时候。
1 | // 单个事件 |
六、Workflow 的 job 是什么?
答:一个 Workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
6.1 如何定义一个 job?
1 | jobs: |
答:通过 job 的 id 定义。
每个 job 必须具有一个 id 与之关联。
上面的 my_first_job 和 my_second_job 就是 job_id。
6.2 如何定义 job 的名称?
jobs.
.name
name 会显示在 Github 上
6.3 如何定义 job 的依赖?job 是否可以依赖于别的 job 的输出结果?
jobs.
.needs
答:needs 可以标识 job 是否依赖于别的 job——如果 job 失败,则会跳过所有需要该 job 的 job。
1 | jobs: |
jobs.
.outputs:用于和 need 打配合,outputs 输出=》need 输入
jobs 的输出,用于和 needs 打配合:可以看到 ouput
1 | jobs: |
6.4 如何定义 job 的运行环境?
jobs.
.runs-on
指定运行 job 的运行环境,Github 上可用的运行器为:
- windows-2019
- ubuntu-20.04
- ubuntu-18.04
- ubuntu-16.04
- macos-10.15
1 | jobs: |
6.5 如何给 job 定义环境变量?
jobs.
.env
1 | jobs: |
6.6 如何使用 job 的条件控制语句?
jobs.
.if
我们可以使用 if 条件语句来组织 job 运行
七、Step 属性是什么?
答:每个 job 由多个 step 构成,它会从上至下依次执行。
7.1 step 运行的是什么?
step 可以运行:
- commands:命令行命令
- setup tasks:环境配置命令(比如安装个 Node 环境、安装个 Python 环境)
- action(in your repository, in public repository, in Docker registry):一段 action(Action 是什么我们后面再说)
每个 step 都在自己的运行器环境中运行,并且可以访问工作空间和文件系统。
因为每个 step 都在运行器环境中独立运行,所以 step 之间不会保留对环境变量的更改。
1 | # 定义 Workflow 的名字 |
八、Action 是什么?
我们可以直接打开下面的 Action 市场来看看:
https://github.com/marketplace?type=actionsgithub.com/marketplace?type=actions
Action 其实就是命令,比如 Github 官方给了我们一些默认的命令:
比如最常用的,check-out 代码到 Workflow 工作区:
https://github.com/marketplace/actions/checkoutgithub.com/marketplace/actions/checkout
8.1 我们应该如何使用 Action?
jobs.
.steps.uses
Action 库:Checkout
比如我们可以 check-out 仓库中最新的代码到 Workflow 的工作区:
1 | steps: |
当然,我们还可以给它添加个名字:
1 | steps: |
Action 库:Setup Node
再比如说,我们如果是 node 项目,我们可以安装 Node.js 与 NPM:
1 | steps: |
8.2 上面我们为什么要用:@v2 和 @v2-beta 呢?
答:首先,正如大家所想,这个 @v2 和 @v2-beta 的意思都是 Action 的版本。
我们如果不带版本号的话,其实就是默认使用最新版本的了。
但是 Github 官方强烈要求我们带上版本号——这样子的话,我们就不会出现:写好一个 Workflow,但是由于某个 Action 的作者一更新,我们的 Workflow 就崩了的问题。
8.3 上面的 with 参数是什么意思?
答:有的 Action 可能会需要我们传入一些特定的值:比如上面的 node 版本啊之类的,这些需要我们传入的参数由 with 关键字来引入。
具体的 Action 需要传入哪些参数,还请去 Github Action Market 中 Action 的页面中查看。
具体库的使用和参数,我们可以去官方的 Action 市场查看:
Github Action 市场github.com/marketplace/actions/
九、我们如何运行命令行命令?
1 | jobs.<job_id>.steps.run |
上文说到,steps 可以运行:action 和 command-line programs。
我们现在已经知道可以使用 uses 来运行 action 了,那么我们该如何运行 command-line programs 呢?
答案是:run
run 命令在默认状态下会启动一个没有登录的 shell 来作为命令输入器。
9.1 如何运行多行命令?
每个 run 命令都会启动一个新的 shell,所以我们执行多行连续命令的时候需要写在同一个 run 下:
- 单行命令
1 | - name: Install Dependencies |
- 多行命令
1 | - name: Clean install dependencies and build |
9.2 如何指定 command 运行的位置?
使用 working-directory 关键字,我们可以指定 command 的运行位置:
1 | - name: Clean temp directory |
9.3 如何指定 shell 的类型?(使用 cmd or powershell or python??)
使用 shell 关键字,来指定特定的 shell:
1 | steps: |
下面是各个系统支持的 shell 类型:
十、什么是矩阵?
答:就是有时候,我们的代码可能编译环境有多个。比如 electron 的程序,我们需要在 macos 上编译 dmg 压缩包,在 windows 上编译 exe 可执行文件。
这种时候,我们使用矩阵就可以啦~
比如下面的代码,我们使用了矩阵指定了:2 个操作系统,3 个 node 版本。
这时候下面这段代码就会执行 6 次—— 2 x 3 = 6!!!
1 | runs-on: ${{ matrix.os }} |
如何用GitHub Action自动编译并且发布软件到 Release
一、配置连接私有秘钥仓库的token
- 首先点击
Settings
- 然后选择
Developer settings
- 依次选择
Tokens
->generate new token
生成新的token后复制并保存下来。
- 在仓库的设置中依次选择
Settings
->Secrets and variables
->Action
->new repository secret
新建一个名为TOKEN的密钥,并将第三步复制的token粘贴进去。
二、配置 GitHub Action
- 依次点击
Action
->Android CI
->Configure
- 配置
android.yml
android.yml
配置如下
1 | name: Build and Release |
- 手动执行一次
Action
依次点击Action
->Build and Release
->Update android.yml
- 如下图所示后,表明Action 已经帮我们完成了编译-发布这两个操作。