GitHub Actions 简介:核心概念、市场与价格
说到 CI/CD 工具链,GitHub Actions 是目前绕不开的一个选项。我个人从 Jenkins 时代一路用过来,第一次接触 Actions 时其实有点抵触——"又是个新玩具?" 但真正在项目里跑通一个完整流水线后,想法变了。它和 GitHub 生态的融合程度,确实让很多繁琐的事变得简单。
这一节我们不聊虚的。直接从核心概念入手,再聊聊它在市场中的位置,最后算算账——到底要花多少钱。
1. 核心概念:六个关键词
理解 GitHub Actions,说白了就是搞清楚六个东西:Event、Workflow、Job、Step、Action、Runner。它们之间的关系像一个嵌套的盒子,我习惯从上往下捋。
一句话概括: 当某个 Event 发生时,触发一个 Workflow,Workflow 里包含若干 Job,每个 Job 由多个 Step 组成,Step 里调用具体的 Action,而这一切跑在 Runner 上。
下面是这六个概念的详细说明,我加了一些项目中遇到的典型场景:
| 概念 | 作用 | 我的经验说 |
|---|---|---|
| Event(事件) | 触发流水线的外部动作,比如 push、PR、issue 评论 | 我在项目中踩过坑:用 pull_request_target 时没注意权限,差点把密钥暴露了 |
| Workflow(工作流) | 一个完整的自动化流程,定义在 .github/workflows/*.yml |
我建议一个仓库尽量拆多个 workflow,别把所有逻辑塞一个文件里 |
| Job(任务) | Workflow 内的独立执行单元,可以并行或串行 | 之前遇到并行 Job 共享数据的问题,后来用 artifacts 解决了 |
| Step(步骤) | Job 内的最小执行单元,自上而下顺序执行 | 每个 Step 最好只干一件事,方便定位失败点 |
| Action(动作) | 可复用的功能模块,可以自己写,也可以从 Marketplace 下载 | 我发现团队里很多人不知道可以写自定义 Action,其实成本很低 |
| Runner(运行器) | 执行 Job 的虚拟机或容器环境 | 自托管 Runner 的坑:版本不一致会导致 Action 行为不同 |
你想想看,这六个概念其实对应了流水线的完整生命周期:触发 → 编排 → 执行。我下面画了张图把这个结构串起来,看完应该会更清楚。
2. 一个简单 Workflow 长什么样
光看概念可能还是有点虚。我给你贴一个最基础的 YAML 示例,这是我经常给团队做演示用的模板:
name: 基础回归流水线
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 安装依赖
run: npm ci
- name: 运行回归用例
run: npm test
这个文件放在 .github/workflows/ 目录下就生效了。每次有人 push 或提 PR 到 main 分支,它就会自动跑。我个人觉得这种"声明即配置"的方式,比 Jenkins 那种 UI 点点点要清爽得多。
小技巧: actions/checkout@v4 是 GitHub 官方的 Action,几乎每个 workflow 都会用到。我建议一开始就把版本号写死(比如 @v4 而不是 @main),避免上游更新后你的流水线莫名其妙挂了。
3. 市场现状:它到底处在什么位置?
现在 CI/CD 工具多得很。Jenkins、GitLab CI、CircleCI、Travis CI…… 为什么 GitHub Actions 能后来居上?我个人的体会有三点:
- 零配置集成。 仓库在 GitHub 上,Actions 原生嵌入,不用额外搭平台。
- Marketplace 生态。 官方市场里有超过两万个现成 Action,很多场景直接复用就行。
- 并发模型灵活。 Job 级别的并行策略和矩阵构建,做回归测试非常方便。
我用一张表快速对比一下主流工具:
| 工具 | 托管方式 | 配置方式 | 生态 | 价格起步 |
|---|---|---|---|---|
| GitHub Actions | 云托管 + 自托管 | YAML in repo | Marketplace 两万+ Action | 公有仓库免费,私有 2000 min/月 |
| Jenkins | 自托管为主 | Jenkinsfile / UI | 插件生态庞大 | 免费(自付服务器) |
| GitLab CI | 云托管 + 自托管 | .gitlab-ci.yml | 与 GitLab 深度绑定 | 免费 400 min/月 |
| CircleCI | 云托管 | .circleci/config.yml | 缓存机制优秀 | 免费 6000 min/月 |
为什么会这样?其实核心原因就一个——离代码最近。开发者不用离开 GitHub 页面就能完成 CI/CD 的全部配置。我记得之前团队从 Jenkins 迁移到 Actions,光"不用再维护一台 Jenkins 服务器"这一点,就让大家松了口气。
4. 价格体系:到底花不花钱?
这是很多团队关心的问题。我直接说结论:中小团队用免费额度基本够了。
GitHub Actions 的计价分两块:免费额度 和 超额按量计费。核心规则如下:
- 公有仓库: 完全免费,不限分钟数。
- 私有仓库(Free 账户): 每月 2000 分钟免费 + 500 MB 存储。
- Team 计划: 每月 3000 分钟免费 + 2 GB 存储。
- Enterprise 计划: 每月 50000 分钟免费 + 50 GB 存储。
超出免费额度后,按操作系统计费(以官方最新价格为准):
| 操作系统 | 单价(美元/分钟) | 常见场景 |
|---|---|---|
| Linux | $0.008 | 编译、测试、lint |
| Windows | $0.016 | .NET 构建、Windows 兼容测试 |
| macOS | $0.08 | iOS 打包、Xcode 构建 |
注意: macOS 的单价是 Linux 的 10 倍。我之前有个团队在 CI 里跑 iOS 打包,一个月超了 400 美元才反应过来。建议非必要不在 CI 里用 macOS 资源,或者严格限制触发频率。
另外有个容易被忽略的点——并发 Job 数。免费账户同一时间最多跑 20 个 Job(Linux),Windows 和 macOS 更少。如果团队比较大,并发需求高,可能需要升级计划。
5. 上手建议:从哪开始?
如果你是第一次用 GitHub Actions,我建议按这个顺序来:
- 先跑通一个最简单的 workflow。 就用上面那个
npm test的例子,先看到它变绿。 - 学会用 Marketplace。 搜索
actions/checkout、actions/setup-node、actions/cache这三个,覆盖 80% 的日常需求。 - 把回归测试加进去。 这是本课程的核心——让每次代码变更都自动跑一遍回归用例。
- 关注账单。 设置用量提醒,避免月底 surprise。
我个人的习惯: 每个 workflow 开头加一个 workflow_dispatch 事件,这样可以在 GitHub 页面上手动触发,调试时特别方便。你试试看,用一次就离不开了。