前一段时间,公司的 Github Action 费用超了,然后我接到一个需求,需要将 Github Action 配合 label 使用,减少不必要的 CI。

Github Action

Github Action 是 GitHub 推出的一种类似于 Travis 的服务,开发者可以编写 Action 脚本,实现开发、编译、测试、部署一套流程全打通。

GitHub Action 已经出来挺长时间了,现在网上已经有了各种各样的脚本,官方也提供了大量脚本供使用,因此使用起来是想当方便的。

Label

在 GitHub 上,issue 或者 pull request 都可以打标签,用于区分不同的类型,或者不同的作用等等。而在前期的 GitHub Action 的使用中,一旦触发 CI,那么就是把全部的 CI 都跑一遍,这样的操作显然会带来大量的浪费,而开发过程中 CI 都是重要且必不可少的一个环节,那怎么办呢?

  1. 减少测试用例的数量。– 这个对减少时间的效果很大,要是把用例全删了,那就不用 CI 了,但是显然是不可取的。
  2. 屏蔽掉部分不需要的 CI。在当前版本中,即使只是修改了一行代码,也会把前端、后端所有的单元测试、E2E 测试以及打包部署等所有流程跑一遍。前端和后端的 E2E,跑一次就得一个小时,既浪费时间,又浪费钱。PS. GitHub Action 的费用是很贵的,每天跑是一笔很大的花销。

那么如何屏蔽掉不用的 CI 呢?Label。Label 可以用来分类,既然可以分类,那我执行 CI 的时候就判断一下类别就 OK 了啊,只有指定标签的 CI 才可以执行。

示例

这里提供一个示例的仓库:action-ci

在本仓库中,标签的选择是通过人手动的去添加,然后触发 CI。实际上应该还可以有更好玩的玩法,可以添加机器人,检测文件改动的位置,然后打上对应的标签,最后触发对应标签的 CI。