GitHub Actions 基础概念与工作流结构

#github-actions #ci-cd #工作流 #自动化

GitHub Actions 基础概念与工作流结构#

GitHub Actions 是 GitHub 内置的自动化平台,允许你在代码仓库中直接定义并运行自动化流程,无需借助任何外部 CI/CD 工具。

💡 提示

常见用途

  • 代码推送后自动运行测试
  • 合并 PR 后自动部署到服务器
  • 定时执行数据抓取脚本
  • 自动发布 npm 包、Docker 镜像等

免费额度:公开仓库完全免费,私有仓库每月有 2,000 分钟的免费额度。

目录结构#

所有 Workflow 文件必须存放在仓库根目录的 .github/workflows/ 文件夹下,文件名以 .yml.yaml 结尾:

your-repo/
├── .github/
│   └── workflows/
│       ├── ci.yml          ← 持续集成流程(如运行测试)
│       ├── deploy.yml      ← 部署流程
│       └── scheduled.yml   ← 定时任务
├── src/
├── package.json
└── README.md

核心概念#

概念说明类比
Workflow(工作流)整个自动化流程,由一个 .yml 文件定义一份完整的工作计划书
Event(事件)触发 Workflow 运行的条件,如代码推送、创建 PR计划书的启动条件
Job(作业)Workflow 中的一个独立任务单元,每个 Job 运行在独立的虚拟机上计划书中的一个章节
Step(步骤)Job 内按顺序执行的最小操作单元章节中的每一个具体步骤
Action(动作)可复用的封装好的操作,通过 uses 引用现成的工具模板
Runner(运行器)执行 Job 的服务器执行计划的工作人员

层级关系#

仓库(Repository)
└── Workflow(工作流)          ← 一个 .yml 文件 = 一个 Workflow
    ├── Event(触发事件)        ← 什么情况下启动这个 Workflow
    └── Job(作业)× N          ← 一个 Workflow 可以包含多个并行或串行的 Job
        ├── Runner(运行器)     ← 执行 Job 的服务器
        └── Step(步骤)× N     ← Job 内按顺序执行的一系列操作
            ├── Action          ← 可复用的封装好的操作
            └── Run             ← 直接执行 Shell 命令

Workflow 示例#

# 【工作流名称】显示在仓库 "Actions" 标签页中的列表名称
name: GitHub Actions Demo

# 【运行显示名】每次触发时动态生成的标题,支持表达式语法
# github.actor 会自动替换为触发本次运行的用户名
run-name: ${{ github.actor }} is testing out GitHub Actions 🚀

# 【触发器定义】控制工作流何时自动执行
# [push] 是简写形式,等价于 on: push: branches: ['**']
# ⚠️ 注意:这表示任何分支的 push 都会触发
on: [push]

# 【作业定义】一个工作流可包含多个 job
jobs:
  build:                          # Job ID,同一 Workflow 中必须唯一
    name: 构建项目                  # Job 的显示名称(可选)
    runs-on: ubuntu-latest        # 【运行环境】指定虚拟机镜像

    # 【Job 级环境变量】(可选)Job 内所有 Step 都可访问
    env:
      NODE_ENV: production        # Node.js 运行模式
      APP_PORT: 8080              # 应用端口号

    # 【超时控制】(可选)超时后 Job 自动取消
    timeout-minutes: 30           # 默认值为 360 分钟(6小时)

    # 【步骤列表】按从上到下的顺序依次执行
    steps:
      # Step 写法一:使用预置 Action(用 uses 引用)
      - name: 拉取代码
        uses: actions/checkout@v4 # 将仓库代码克隆到运行器工作目录

      # Step 写法二:执行单行 Shell 命令(用 run 指定)
      - name: 输出 Node 版本
        run: node --version       # 直接执行单条命令

      # Step 写法三:执行多行 Shell 命令(用 | 表示多行文本块)
      - name: 安装依赖并构建
        run: |                    # | 表示 YAML 多行字符串
          npm install             # 安装项目依赖
          npm run build           # 执行构建
          echo "构建完成"          # 输出确认信息

托管运行器#

GitHub 提供以下免费的托管运行器:

标签操作系统说明
ubuntu-latestUbuntu(最新 LTS)最常用,速度快,免费额度最多
ubuntu-22.04Ubuntu 22.04指定固定版本,避免升级不兼容
windows-latestWindows Server(最新)用于需要 Windows 环境的构建
macos-latestmacOS(最新)用于 iOS/macOS 应用构建,消耗额度最快(约 Ubuntu 的 10 倍)
技巧

选择运行器的建议

  • 优先使用 ubuntu-latest,免费额度最多
  • 只有在确实需要 Windows/macOS 环境时才使用对应的运行器
  • 对于关键的 CI 流程,建议指定固定版本(如 ubuntu-22.04),避免因 latest 升级导致构建失败

相关笔记