使用 Github Actions 做一个免费的 Task Runner
有时候我们需要周期性的执行一些脚本,有时候需要在有必要的时候通过触发执行一些脚本。我们有点追求,需要知道任务执行的时间,执行的状态,执行的日志。这么一整套其实是个挺复杂的需求,那么有没有现成的,优雅的解决方案呢?答案是有!那就是 Github Actions
!
为什么不是 crontab⌗
- 需要有自己的服务器(这对于开发人员都是基础设施,应该人人都有,可是这里面真正的成本是迁移成本)
- 执行状态,日志需要进入服务器才能查看
- 修改比较麻烦
Github Actions 是什么⌗
Github Actions
是一个基于 GitHub 事件的 CI/CD pipeline
,在微软收购 GitHub 之前,大家基本都是用的 CircleCI
或者 TravisCI
之类的,收购之后,由于微软自家平台本来就有 Azure pipeline
服务,所以就诞生了 Github Actions
,其实相当于 Azure pipeline
的定制版本。
说了这么多, Github Actions
有什么相比别的有什么亮点呢?其实最大的亮点就是支持 Schedule
任务,也就是你可以通过 crontab 的方式执行任务。
如何使用⌗
首先,你要具备测试资格(现在不知道还在不在 beta 阶段)。
配置⌗
最核心的一点,其实就是在你的项目里面建一个 .github/workflows
文件夹,然后在里面新建一个(也支持多个) {name}.yml
文件作为配置文件。
这个运行环境其实里面预装了好多基础软件和工具,基本的 node
,python
,golang
等都已经装好了, 可以在 这里 查看。
可以选择使用自己熟悉的高级语言来写脚本,这样每次执行之前,我们需要把自己的 repo checkout 下来,所以需要加一点配置:
注意:由于执行器启动需要时间,所以只能保证在配置的时间点,执行器开始启动,而不是开始执行脚本。
安全⌗
执行脚本可能需要一些敏感的配置,Github Actions
支持配置 secrets
,具体文档在 这里。
高阶玩法⌗
如果需要在不同时候触发不同脚本,难道我们需要创建多个 repo ?
不,我们不需要,这样太过愚蠢。
其实我们可以读取本次触发的事件信息,GITHUB_EVENT_PATH
这个环境变量就是文件路径,例如:/github/workflow/event.json
,这里面可以拿到更多东西。
例如,可以拿到提交信息之类的有用信息,接着就可以发挥了,比如在提交信息中配置关键字,通过不同关键字,执行不同脚本。
总结⌗
这样我们就拥有了一个免费的,功能齐全的 Task Runner
。