前几天正好在调试 vite-plugin-federation 的一个 Github Action 问题,调试起来非常痛苦,大概流程就是不停的修改代码,然后 PUSH 到 github,然后继续等待 Github Action 触发,不行的话继续修改 Github CI 的代码,后来我实在无法忍受这样的折磨,找到了一款可以在本地模拟 Github Action 的工具 ACT。
用途
ACT 是一款使用 Docker 在本地模拟 Github Action 的工具,这样可以在本地调试 Github Action,省去一边又一遍的 PUSH 和枯燥的等待 CI 触发。
安装
官网给出了很多安装方式,涵盖 Linux/MacOS/Winodws,可以自行前往 官网 安装,这里我使用的是 Linux,所以我使用以下的方式
curl https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
安装成功后会出现如下字样就说明安装成功了
nektos/act info checking GitHub for latest tag
nektos/act info found version: 0.2.31 for v0.2.31/Linux/x86_64
nektos/act info installed ./bin/act
更多的安装方式可以到 官网 #install 查看
使用
理论上安装完成之后第一次运行会让你选择基础镜像,也就是选择什么环境来运行 Github Actions
./act
? Please choose the default image you want to use with act:
- Large size image: +20GB Docker image, includes almost all tools used on GitHub Actions (IMPORTANT: currently only ubuntu-18.04 platform is available)
- Medium size image: ~500MB, includes only necessary tools to bootstrap actions and aims to be compatible with all actions
- Micro size image: <200MB, contains only NodeJS required to bootstrap actions, doesn't work with all actions
Default image and other options can be changed manually in ~/.actrc (please refer to https://github.com/nektos/act#configuration for additional information about file structure) [Use arrows to move, type to filter, ? for more help]
Large
> Medium
Micro
- Large: 较大的镜像,包含完整
- Medium: 中等大小的镜像(推荐)
- Micro: 较小的镜像
由于 ACT 使用的是 docker 来模拟 Github Action,所以这里对应的大小就是 docker 镜像的大小,除非你基本不会进入 docker 容器内调试,否则不建议使用 Micro 镜像,该镜像裁减了很多包导致进入容器内部后很多命令都不支持,需要单独安装。
选择完成后理论上就可以直接选择项目来执行了,注意进入项目的根目录,也就是隐藏文件夹 .github 的父目录执行。
- 首先我们使用
act -l可以查看项目有哪些Github Action,可以看到只有一个配置,需要关注Job name和Event两列,可以使用这两列来决定触发哪个Action。
$ act -l
Stage Job ID Job name Workflow name Workflow file Events
0 build build Publish publish.yml push
-
然后我们可以单独触发这个
Action,可以使用act EventName(也就是上面显示的 Events 的)或者act -j JobName来执行该Action- 使用
act EventName形式
act push- 使用
act -j JobName形式
act -j - 使用
执行后可以看到已经成功在本地运行 Github Action,由于执行时间较长,不再演示完整的流程

Action 中包含 Secret?
如果你的 Github Action 中包含了 Secret,需要在执行 act 命令时指定该值
-
act -s MY_SECRET = VALUE注意,不要再非安全环境使用该方式,因为可以使用命令记录工具例如
history获取到该值。 -
act -s MY_SECRET检查是否存在
MY_SECRET的环境变量,如果有,直接使用,没有的话将会提示用户手动输入。 -
act --secret-file mySecrets从文件中获取
Secret的值