GitHub Actions Workflow 语法
适用场景:CI/CD 自动化构建、测试、部署等
文件位置:.github/workflows/xxx.yml
语法格式:YAML(注意缩进,通常为 2 空格)
一、基本结构
1 | name: 工作流名称(可选) |
二、核心字段详解
1. name(可选)
定义工作流在 GitHub Actions 面板中显示的名称。
示例:
1
name: CI Pipeline
2. on(必需)
- 定义触发工作流的事件。
- 常见事件:
push:代码推送pull_request:PR 创建/更新schedule:定时任务(cron)workflow_dispatch:手动触发
示例
1 | on: |
3. jobs(必需)
- 包含一个或多个任务(job),每个 job 独立运行。
- 可通过
needs设置依赖关系。
1 | jobs: |
4. jobs.<job>.runs-on(必需)
- 指定 job 运行的虚拟机环境(VM)。
- 常见值:
ubuntu-latestwindows-latestmacos-latest
1 | runs-on: ubuntu-22.04 |
⚠️ 注意:每个 job 启动一台全新的 VM,结束后销毁。
5. jobs.<job>.steps(必需)
- 每个 job 包含一系列步骤,按顺序执行。
- 每个 step 可以是:
uses:使用一个 Actionrun:执行 shell 命令
三、Step 的完整语法字段
| 字段 | 说明 |
|---|---|
name |
步骤名称(推荐添加) |
id |
唯一标识,用于引用输出 steps.<id>.outputs |
uses |
使用外部或本地 Action(不能与 run 共存) |
run |
执行 shell 命令(Linux: bash,Windows: pwsh) |
with |
向 uses 的 Action 传递参数 |
env |
设置该 step 的环境变量(局部) |
if |
条件判断,决定是否执行 |
continue-on-error |
true 表示出错也继续后续步骤 |
timeout-minutes |
步骤超时时间 |
示例
1 | - name: Build App |
四、关键概念解析
✅ uses:使用公共或私有 Action
格式:
owner/repo@version示例:
1
2
3
4- uses: actions/checkout@v4 # 检出代码
- uses: actions/setup-node@v4 # 设置 Node.js
with:
node-version: "18"来源:
- 公共:GitHub Marketplace(如
actions/checkout) - 私有:
my-org/my-action@v1 - 本地:
./.github/actions/my-action
- 公共:GitHub Marketplace(如
📌
actions/checkout@v4是几乎所有 workflow 的第一步,用于拉取代码。
✅ run vs uses
| 类型 | 说明 |
|---|---|
run |
执行 shell 命令(如 npm install) |
uses |
使用封装好的自动化模块(Action) |
❌ 一个 step 不能同时使用
run和uses
✅ Action 的三种类型
| 类型 | 说明 |
|---|---|
| JavaScript Action | Node.js 编写,轻量快速(如 setup-node) |
| Docker 容器 Action | 封装在 Docker 中,环境隔离(如 docker/build-push-action) |
| Composite Action | YAML 定义的多个 run/uses 组合,类似“脚本集合” |
✅ 环境变量与机密
1 | env: |
🔐
secrets在仓库 Settings > Secrets 中配置。
✅ 条件控制 if
1 | - run: npm publish |
常用上下文:
${{ github.ref }}:当前分支${{ github.actor }}:触发者${{ secrets.X }}:机密
✅ 矩阵构建 strategy.matrix
1 | strategy: |
五、最佳实践建议
- ✅ 始终使用
actions/checkout@v4作为第一步 - ✅ 给每个 step 添加
name - ✅ 使用
secrets存储敏感信息 - ✅ 指定 Action 版本(如
@v4),避免意外更新 - ✅ 合理使用
if减少不必要的执行 - ✅ 用
actions/cache加速构建(如缓存 node_modules)
六、学习资源
- 📘 官方文档:https://docs.github.com/en/actions
- 🛒 Marketplace:https://github.com/marketplace?type=actions
📌 一句话总结:
Workflow = 触发事件 + 多个 Job → 每个 Job 在独立 VM 中运行 → 执行多个 Step → 每个 Step 是 Action 或 Shell 命令
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 YianNotes!

