Act本地GitHub Actions — 本地运行GitHub Actions
一句话概述:Act 让你在本地用 Docker 运行 GitHub Actions 工作流,不用每次 push 到 GitHub 才能测试 CI,省时省心。
核心知识点速查表
| 概念 | 白话解释 |
|---|
| Act | 命令行工具,本地模拟 GitHub Actions 环境 |
| Workflow | GitHub Actions 的工作流文件(.github/workflows/*.yml) |
| Event | 触发事件(push、pull_request 等) |
| Runner Image | 模拟 GitHub 环境的 Docker 镜像 |
| Secrets | 密钥/环境变量,本地需要单独配置 |
当前版本信息(2026年)
| 信息 | 详情 |
|---|
| 最新版本 | v0.2.88(2026年5月1日) |
| 依赖 | Docker |
| GitHub | https://github.com/nektos/act |
| 文档 | https://nektosact.com |
| 许可证 | MIT |
安装配置
# macOS(Homebrew)
brew install act
# Linux(包管理器)
# Arch: pacman -S act
# Nix: nix-env -i act
# 通用安装(curl)
curl -s https://raw.githubusercontent.com/nektos/act/master/install.sh | sudo bash
# GitHub CLI 插件(另一种方式)
gh extension install nektos/gh-act
# 使用:gh act
# 验证安装
act --version # 应该显示 0.2.88
# 首次运行(选择 Runner 镜像)
act
# 会提示选择镜像大小:
# Micro — 最小(~200MB),功能有限
# Medium — 中等(~500MB),推荐大多数场景
# Large — 完整(~17GB),最接近 GitHub 真实环境
配置文件
# .actrc — 项目级配置(放在项目根目录)
-P ubuntu-latest=catthehacker/ubuntu:act-latest # 指定 Runner 镜像
--env-file .env.act # 环境变量文件
--secret-file .secrets # 密钥文件
# ~/.actrc — 全局配置
-P ubuntu-latest=catthehacker/ubuntu:act-latest
基本使用
运行工作流
# 运行所有 push 触发的工作流(默认事件)
act
# 模拟 pull_request 事件
act pull_request
# 模拟特定事件
act workflow_dispatch # 手动触发
act schedule # 定时触发
# 列出所有可用的工作流和 job
act -l # 列出所有 job
act -l push # 列出 push 事件的 job
# 运行指定 job
act -j build # 只运行名为 build 的 job
act -j test # 只运行名为 test 的 job
# 运行指定工作流文件
act -W .github/workflows/ci.yml
# 试运行(不真的执行,看看会做什么)
act -n # dry-run 模式
处理 Secrets
# 方法1:命令行传入
act -s MY_TOKEN=abc123
# 方法2:交互式输入(不会显示在终端)
act -s MY_TOKEN
# 方法3:从文件读取(推荐)
# 创建 .secrets 文件(不要提交到 git!)
echo "GITHUB_TOKEN=ghp_xxxx" > .secrets
echo "DOCKER_PASSWORD=mypass" >> .secrets
act --secret-file .secrets
# 方法4:从环境变量读取
export MY_TOKEN=abc123
act -s MY_TOKEN # 自动从环境变量读取
实际示例
# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install ruff
- run: ruff check .
test:
runs-on: ubuntu-latest
needs: lint # 依赖 lint job
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'
- run: pip install -r requirements.txt
- run: pytest tests/ -v
# 本地测试这个工作流
act # 运行所有 push 触发的 job
act -j lint # 只运行 lint
act -j test # 只运行 test
act -v # 详细输出(调试用)
高级用法
使用自定义事件 Payload
# 模拟带 payload 的事件
act pull_request --eventpath event.json
# event.json 内容:
# {
# "pull_request": {
# "number": 42,
# "head": { "ref": "feature-branch" },
# "base": { "ref": "main" }
# }
# }
使用本地 Action
# 如果工作流中引用了本地 action
# .github/workflows/ci.yml
steps:
- uses: ./.github/actions/my-action # 本地 action
# Act 会自动处理本地 action
指定平台镜像
# 使用更完整的镜像(更接近 GitHub 环境)
act -P ubuntu-latest=catthehacker/ubuntu:full-latest
# 使用特定版本
act -P ubuntu-22.04=catthehacker/ubuntu:act-22.04
# 多平台配置(.actrc)
-P ubuntu-latest=catthehacker/ubuntu:act-latest
-P ubuntu-22.04=catthehacker/ubuntu:act-22.04
-P ubuntu-20.04=catthehacker/ubuntu:act-20.04
常见报错与解决
| 报错信息 | 原因 | 解决方案 |
|---|
docker not found | Docker 没安装/没启动 | 安装并启动 Docker |
unable to find image | Runner 镜像拉取失败 | 手动 docker pull 或换镜像 |
Error: Process completed with exit code 1 | 命令执行失败 | 用 -v 看详细日志 |
| Action 不兼容 | 某些 Action 依赖 GitHub 专有 API | 跳过该 step 或 mock |
systemd not available | Docker 容器不支持 systemd | 换方案或跳过 |
| 权限错误 | Docker socket 权限 | sudo act 或加用户到 docker 组 |
已知限制
# Act 不能完美模拟的 GitHub 功能:
# 1. services(docker-compose 风格的服务容器)— 部分支持
# 2. GitHub API 调用(如 github.token)— 需要提供真实 token
# 3. Matrix 策略 — 支持但有些边界情况
# 4. Artifacts 上传/下载 — 本地模拟
# 5. Caching(actions/cache)— 部分支持
速查表
# ===== 基本命令 =====
act # 运行 push 事件的工作流
act pull_request # 模拟 PR 事件
act -l # 列出所有 job
act -j job-name # 运行指定 job
act -n # 试运行(不执行)
act -v # 详细输出
# ===== 配置选项 =====
act -s KEY=VALUE # 传递 secret
act --secret-file .secrets # 从文件读 secrets
act --env-file .env # 环境变量文件
act -W path/to/workflow.yml # 指定工作流文件
act --eventpath event.json # 自定义事件 payload
# ===== 镜像选项 =====
act -P ubuntu-latest=image # 指定 runner 镜像
act --pull=false # 不拉取新镜像
# ===== 调试 =====
act -v # 详细模式
act --insecure-secrets # 显示 secret 值(调试用)
同类工具对比
| 特性 | Act | GitHub Actions | GitLab CI | Jenkins |
|---|
| 本地运行 | ✅ 核心功能 | ❌ 需要 push | ❌ | ✅ |
| 配置格式 | YAML(复用 GA) | YAML | YAML | Groovy |
| 环境隔离 | Docker 容器 | 云端 VM | Docker/VM | 可选 |
| 学习成本 | 低(会 GA 就会) | 低 | 低 | 高 |
| 免费使用 | ✅ 完全免费 | 有限额 | 有限额 | ✅ |
总结:Act 是 GitHub Actions 开发者的必备工具。本地调试 workflow 不用反复 push,节省大量时间。但要注意它不能 100% 模拟 GitHub 环境,复杂的 workflow 最终还是要在 GitHub 上验证。