首页/开发/CI/CD 与发布速查/GitHub Actions 工作流结构
工具链要点63 条

GitHub Actions 工作流结构

工作流文件位于 .github/workflows:name、on、jobs 为核心结构;每个作业在自己的 runner 上顺序执行一组步骤。

CI/CD 与发布速查开发更新于 2026-10-13

工作流结构是什么

GitHub Actions 工作流文件位于 .github/workflows 目录,核心结构三件套:name(工作流名)、on(触发事件)、jobs(作业集合)。每个作业在自己的运行器(runs-on)上执行,步骤(steps)顺序进行:uses 调用现成动作,run 执行命令。作业之间默认并行,用 needs 构成依赖关系;跨作业传值靠 outputs。步骤任一失败即中止该作业(除非显式配置 continue-on-error)。

基本信息

位置.github/workflows 目录下的 yml 文件
核心键name、on、jobs
作业内runs-on 选择运行器,steps 顺序执行
步骤类型uses 调用动作,run 执行命令
作业间默认并行,needs 声明依赖,outputs 传值

典型使用场景

  • 常规 CI:push 时跑构建与测试,pull_request 时验证合并结果。
  • 多版本矩阵:strategy.matrix 展开多环境组合验证。
  • 发布流水线:标签触发构建制品、推镜像、创建 Release。
  • 定时任务:schedule 跑夜间巡检与依赖检查。
  • 可复用工作流:公共流程抽成可被多仓库调用的工作流。
  • 权限收紧:permissions 限定令牌范围,只在必要作业开放写权限。
  • 环境部署:environment 绑定审批与保护规则,控制生产入口。

最小工作流

最小工作流
name: ci
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4   # 检出代码
      - run: make build             # 编译
  test:
    needs: build                    # 依赖构建作业
    runs-on: ubuntu-latest
    steps: [{run: make test}]
步骤默认顺序执行、任一失败即中止该作业;跨作业协作通过 needs 与 outputs。
uses 引用的第三方动作以你仓库的凭据运行:安全要求高的仓库固定到完整提交 SHA,动作升级要评审。
permissions 按最小权限原则收敛:工作流或作业级别指定令牌范围,例如默认只给只读、部署作业才开写。

结构速记

  • 一个工作流可含多个作业,作业之间默认并行;需要顺序或数据传递时显式写 needs 与 outputs。
  • 步骤粒度是排查单元:把构建、测试、上传等职责拆成独立步骤,失败定位和重跑都更省力。
  • 事件过滤写在 on 下:分支、路径与类型过滤能显著减少无关运行。
runs-on 选择运行器:托管运行器开箱即用,自托管运行器适合内网依赖与特殊硬件,用标签组合精确分发。

易错点

  • run 的多行脚本任一行失败即中止:预期可失败的检查要显式处理(continue-on-error 或 || true),否则流水线误红。
  • uses 未固定主版本:动作升级可能引入不兼容或安全问题,生产仓库建议固定到提交 SHA。
  • 在 pull_request 触发的作业里依赖密钥:fork 的 PR 默认拿不到,配置不当会静默失败;别用高权限事件简化绕过。
  • 工作流文件位置放错:.github/workflows 之外不生效,移动与改名后要核对触发是否还在。
  • permissions 未收敛:令牌默认范围偏大,一旦依赖或动作被利用,影响面随之扩大。
  • 把多个职责塞进一个 run 步骤:失败定位变难且无法单独重试,拆成独立步骤成本更低。

数据来源与参考

  • GitHub Docs《Workflow syntax for GitHub Actions》
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌