使用act本地调试github action
前言
今年git-ops应该是比较流行的概念了。很多新兴创业公司尤其是本身需要开源的更加会重度依赖github提供的CI能力。使用github action是git-ops中不可缺少的环节,今天就分享一款开源工具act,它可以帮助我们在本地调试github action。本地调试github action的好处主要是快速的反馈。如果通过git push代码再触发github action,那么测试的流程就会变得比较长,push的代码还会污染仓库。
基本原理
Act 的执行原理如下:
- 首先,act 解析你的 .github/workflows 目录中的工作流程文件,并找到要执行的工作流程。它可以解析多个工作流程文件,包括 yaml 和 json 格式的文件。
- 接下来,act 创建一个与 GitHub Actions 中的 Runner 类似的容器环境。这个容器环境可以在本地运行,并与你的代码仓库同步。它使用 Docker 技术创建一个运行环境,该环境包含了所有需要的依赖项和配置。
- 一旦容器环境准备就绪,act 开始按照工作流程中定义的步骤执行任务。它会模拟 GitHub Actions 中的事件触发,并执行工作流程中的每个步骤。act 支持各种类型的步骤,包括运行命令、检出代码、设置环境变量等。
- 在执行每个步骤时,act 将显示步骤的输出,并记录执行的状态和结果。它还会处理步骤之间的依赖关系,确保它们按照正确的顺序执行。
- 当所有步骤完成后,act 将显示工作流程的总体状态和结果,并提供有关执行过程的详细信息。它还会生成 GitHub Actions 类似的日志和报告。
基本命令
在.github的同级目录可以执行如下命令:
1 | ## 列出workflow |
使用案例
很多项目都会依赖数据库,这次我们引入一个bytebase的github action来对数据库的表结构做一些规范约束。
配置github action
~/github/workflows/sql-review.yml
1 | on: [pull_request] |
准备违反sql规则的文件
默认的规则要求一个表必须包含update_ts字段,我们随便建一个sql文件,包含的表不包含这个字段即可。
本地环境变量准备
在使用 act 运行 GitHub Actions workflow 时,需要提供mock的secrets信息来模拟 GitHub 环境,否则会有如下报错:
act依赖的github token等secrets信息需要定义在一个文件中,例如我们可以定义到.idea/act_secrets文件中,使得act运行时可以正常clone bytebase的仓库。这个可以在自己的github账户下创建一个github token
1 | GITHUB_TOKEN= |
确认本地workflow并执行
act -n可以查看待执行的workflow,我本地虽然有CI/CD的workflow,但是被ignore了,所以直接执行act来验证sql-review这个workflow的执行:
运行执行命令:
1 | ## mac m1上执行需要加额外参数指定架构 |
运行结果报错
1 | [sql-review.yml/SQL Review] 🐳 docker cp src=/Users/wanshao/.cache/act/umani-changed-files@v3.3.0/ dst=/var/run/act/actions/umani-changed-files@v3.3.0/ |
主要原因在于sql review这个github action本身实现依赖umani-changed-files这个action,这个action强依赖git pr event触发地context,这个context act本地模拟的时候是模拟不出来的,因此导致失败。
总结
act本身是个不错的项目,但是当前也并非支持所有的github action本地调试,例如这次使用的bytebase sql review插件