从零开始学习 CI/CD 自动化流水线 — 通过 4 个渐进级别,亲手构建真实可用的工作流
点击各节点深入了解 GitHub Actions 的核心概念与执行流程
.github/workflows/*.ymlname → on → jobsenv:push / pull_requestschedule'0 2 * * *' 每天凌晨 2 点workflow_dispatchrepository_dispatchruns-onneedsstrategy.matrixif 条件if: github.ref == 'refs/heads/main'outputsuses: actions/checkout@v4run:with:setup-node、setup-python、cache、upload-artifactsecrets.GITHUB_TOKENsecrets.MY_SECRET${{ }}${{ github.sha }}、${{ env.MY_VAR }}upload-artifact / download-artifactactions/cache| 触发器 | 触发时机 | 典型场景 |
|---|---|---|
push | 代码推送到指定分支 | CI 构建 & 测试 |
pull_request | PR 创建/更新 | 代码审查 & 检查 |
schedule | Cron 定时 | 定期巡检、夜间构建 |
workflow_dispatch | 手动触发 | 按需部署、调试 |
release | 发布版本时 | 发布流水线 |
workflow_call | 被其他 Workflow 调用 | 可复用 Workflow |
目标:读懂一个完整的 Workflow YAML 文件,理解每个字段的含义 · 预计 15 分钟
下面是一个 Node.js 项目的 CI Workflow。点击每行注释旁的 💡 按钮,查看该字段的详细说明。
把这个 Workflow 想象成一条流水线。拖动下面的卡片,将它们排列为正确的执行顺序:
在下面的 Workflow 中,有一个 YAML 语法错误。找出来并修正它:
run 后面应该用冒号 : 而不是空格。正确写法是 run: echo "Hello"。YAML 中键值对必须用冒号分隔。
目标:补全一个 Python 项目的 CI Workflow,掌握 Jobs、Steps 和 Matrix 构建 · 预计 25 分钟
你正在为一个 Python Flask 项目搭建 CI。模板已搭好框架,请根据注释补全 TODO 部分。
💡 使用 matrix 后,GitHub 会自动创建 2 个并行 Job,分别测试 Python 3.10 和 3.12。
每次 CI 都重新 pip install 太慢了。用 actions/cache 缓存依赖,加速后续运行:
这里的 key 是缓存的唯一标识。当 requirements.txt 内容变化时,哈希值改变,缓存失效并重新生成。restore-keys 允许精确匹配失败时回退到前缀匹配。
缓存和 Artifacts 的区别:
Cache = 加速依赖安装,在同一 Job 的后续步骤中复用
Artifacts = 在不同 Job 之间传递文件,或保存构建产物
缓存有 10GB 上限,7 天不用自动清理。
目标:独立编写一个包含构建、测试、部署的多 Job Workflow · 预计 40 分钟
你有一个 Node.js + Docker 的 Web 应用。请编写一个 Workflow 满足以下要求:
在下方编辑器中编写你的 Workflow YAML。可以随时点击「查看参考」对比答案。
目标:优化流水线性能、处理边缘场景、构建可复用 Workflow · 预计 40 分钟
你的 Workflow 运行时间从 3 分钟增长到了 12 分钟。在不改变功能的前提下,用以下手段优化:
用 actions/cache 缓存 node_modules 或 pip 包
lint 和 test 可以在两个 Job 中并行运行
仅当 src/ 目录变更时才触发 CI
文档更新不需要跑测试
当你有多个项目使用相似的 CI 配置时,可以抽取为 Reusable Workflow:
测试失败时自动发送通知,且允许某些非关键步骤失败而不阻塞整个流水线:
concurrency: 同一分支只保留最新运行,取消旧的
concurrency: { group: ${{ github.ref }}, cancel-in-progress: true }
environment: 部署环境保护,需要人工审批
environment: production
permissions: 精细控制 GITHUB_TOKEN 的权限范围
permissions: { contents: read, packages: write }
10 道题检验你的学习成果,点击选项作答
点击卡片展开完整定义
你已经掌握了 GitHub Actions Workflow 的核心知识
为个人项目添加基础 CI Workflow
Matrix 构建 + 缓存 + Artifacts
Reusable Workflow + 自定义 Action
📚 推荐阅读:GitHub Actions 官方文档 · 官方 Starter Workflows