1. 概述
在本教程中,我们将介绍一个名为 act
的命令行工具,它可以用于在本地运行 GitHub Actions 的工作流(Workflow)。这将极大提升我们开发和调试 CI/CD 流水线的效率。
2. GitHub Actions 工作流简介
GitHub Actions 是一个强大的 CI/CD(持续集成/交付)平台,允许我们通过 YAML 文件定义构建、测试和部署流程。这些 YAML 文件通常放在 .github/workflows
目录下,每个文件定义了一个或多个 Job,每个 Job 又由多个 Step 组成。
✅ 优势:声明式语法、与 GitHub 深度集成、支持丰富的 Action 市场
❌ 痛点:由于 GitHub Actions 本身只能在云端运行,本地开发和测试工作流时反馈周期较长,每次修改都需要 push 到远程仓库并手动触发流水线,效率低下。
3. act 工具介绍
act 是一个开源的命令行工具,允许我们在本地运行 GitHub Actions 工作流。它通过 Docker 模拟 GitHub Actions 的执行环境,使得我们可以在本地快速测试和验证工作流逻辑。
3.1. 安装 act
我们可以通过访问 nektos/act GitHub 仓库的发布页面 下载对应的二进制文件。
以 Linux x86_64 系统为例,使用以下命令下载并解压:
$ wget -qO- https://github.com/nektos/act/releases/download/v0.2.64/act_Linux_x86_64.tar.gz | tar xvz
验证安装是否成功:
$ ./act --version
act version 0.2.64
✅ 安装完成后,我们就可以使用 act
命令来执行本地工作流了。
3.2. 准备测试仓库
我们以 github-actions-demo 仓库为例进行演示:
$ git clone git@github.com:cplee/github-actions-demo.git
进入目录后查看 .github/workflows/main.yml
文件内容:
name: CI
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
- run: npm install
- run: npm test
这是一个典型的 Node.js 项目构建流程,包含代码拉取、环境配置、安装依赖和执行测试四个步骤。
3.3. 基本使用
确保当前目录下包含 .github
文件夹,然后执行:
$ cd github-actions-demo && ../act
输出示例如下:
[CI/test] 🚀 Start image=catthehacker/ubuntu:act-latest
...
[CI/test] ⭐ Run Main actions/checkout@v2
...
[CI/test] ✅ Success - Main actions/checkout@v2
...
[CI/test] ⭐ Run Main npm test
...
[CI/test] ✅ Success - Main npm test
[CI/test] 🏁 Job succeeded
✅ act 会模拟 GitHub Actions 的执行环境,并逐步执行每个 Step。
⚠️ 如果我们尝试模拟一个不存在的触发事件(如 release
):
$ ../act release
Error: Could not find any stages to run...
我们需要创建一个监听 release
事件的 workflow 文件:
name: CI
on: release
jobs:
release:
runs-on: ubuntu-latest
steps:
- run: echo 'on release'
再次运行:
$ ../act release
...
[CI/release] ⭐ Run Main echo 'on release'
...
[CI/release] ✅ Success - Main echo 'on release'
[CI/release] 🏁 Job succeeded
✅ 成功执行!
3.4. 常用选项
act 支持多个选项,用于模拟 GitHub Actions 的上下文和环境变量。
3.4.1. 指定 actor
使用 --actor
指定触发工作流的用户:
$ ../act --actor Baeldung
对应工作流中可以使用:
- run: echo "I am ${{ github.actor }}"
3.4.2. 指定事件 payload
使用 --eventpath
注入事件数据:
$ ../act --eventpath release-event-payload.json
3.4.3. 注入密钥
使用 --secret
注入敏感信息:
$ ../act --secret DOCKER_PASSWORD=password
这些参数可以帮助我们更真实地模拟线上环境,便于本地调试。
4. 总结
GitHub Actions 是一个强大且灵活的 CI/CD 平台,但在本地开发时存在反馈周期长的问题。act 工具很好地弥补了这一短板,它让我们可以在本地运行和调试 GitHub Actions 工作流,从而提升开发效率,减少线上调试的风险。
✅ 主要优势包括:
- 支持本地运行 GitHub Actions 工作流
- 支持注入事件、上下文和密钥
- 使用 Docker 模拟真实运行环境
⚠️ 踩坑提示:确保当前目录包含 .github
文件夹,否则 act 无法识别工作流。
✅ 推荐在开发 GitHub Actions 工作流时优先使用 act 进行本地验证,再 push 到远程仓库。