---
title: "12.3 CI/CD 与自动化"
---

# 12.3 CI/CD 与自动化

> **本节目标**：理解 CI/CD 的核心概念，让代码推送后自动完成构建、测试和部署。

小明部署成功后的第二天，他修了一个 bug，推送到 GitHub。过了几分钟，他打开网站一看——bug 已经修好了。

"我没点部署啊？"小明有点懵。

其实，从 12.1 连接 GitHub 的那一刻起，小明就已经在用 CI/CD 了——只是他不知道。

## 你已经在用 CI/CD 了

CI/CD 听起来很高级，但用大白话说就是两件事：

- **CI（持续集成）**：每次推送代码，自动运行检查和构建，确保代码没问题
- **CD（持续部署）**：检查通过后，自动发布到线上

<CIWorkflow />

你只负责写代码和推送，中间的一切都是自动的。

当你在 12.1 把 GitHub 仓库连接到 EdgeOne Pages 时，平台在 GitHub 上注册了一个 **webhook**。就像你在淘宝下单后物流系统主动给你发短信"已发货"——你不需要每隔五分钟刷一次物流页面。webhook 就是这种"有事主动通知"的机制：每次你 `git push`，GitHub 会主动通知 EdgeOne："嘿，有新代码了。" EdgeOne 收到通知后，自动拉取代码、安装依赖、执行构建、发布上线。

这就是"推送即部署"，也是最简单的 CI/CD。

## 平台内置的 CI/CD

如果你用的是 EdgeOne Pages、Vercel、Cloudflare Pages 这类平台，CI/CD 已经内置了，不需要额外配置。连接 GitHub 后，平台会自动响应三种事件：

- **推送到 `main` 分支** → 自动部署到生产环境（用户访问的正式版本）
- **创建 Pull Request** → 自动构建并生成预览链接

![image-20260302013311084](/images/Advanced/image-20260302013311084.png)

**预览链接是 CI/CD 最直观的产物。** 

## 什么时候需要自定义流水线

平台内置的"推送即部署"对个人项目已经够用了。但随着项目变复杂，你可能想在部署之前多做一些事情：

- 自动运行测试，确保新代码没有破坏已有功能
- 自动检查代码风格，保持代码整洁
- 自动检查类型错误，避免低级 bug 上线

小明的朋友提了一个建议："我们加个自动测试吧，免得合并了有 bug 的代码。"这正是第九章测试那一节的延续——你写了测试，但每次都要手动跑，容易忘。如果能在每次推送时自动跑测试，就不会有遗漏了。

这时候就需要 **GitHub Actions**——GitHub 自带的 CI/CD 工具。

## GitHub Actions：自动化菜谱

<DeploymentPipeline />

GitHub Actions 通过 `.github/workflows/` 目录下的 YAML 文件来配置。你可以把它理解成一份"菜谱"：告诉 GitHub 在什么时候、按什么步骤、做什么事。

典型的配置包含三个部分：

**触发条件（`on`）**：定义什么时候运行。比如推送到 `main` 分支时，或者创建 PR 时。

**运行环境（`runs-on`）**：指定在什么系统上运行（通常是 `ubuntu-latest`）。GitHub 会启动一台临时虚拟机来执行任务——用完就销毁，确保每次运行环境都是干净的。

**执行步骤（`steps`）**：具体要做的事情，按顺序执行：
1. 拉取代码
2. 安装依赖（pnpm/npm）
3. 检查代码风格（lint）
4. 构建项目（build）
5. 运行测试（test）

**GitHub Actions 就是一份菜谱：拉代码、装依赖、检查格式、构建、测试。** 和你在本地开发时做的事一模一样，只不过每次推送都会自动执行一遍。

如果某一步失败了（比如测试没通过），整个流水线会停下来，GitHub 会在 PR 页面上显示一个红色的 ✗。这意味着这个 PR 的代码有问题，不应该合并。



## 分支与部署环境

在第十一章你学了分支的概念。在 CI/CD 的语境下，不同的分支通常对应不同的部署环境：

- **`main` 分支**对应生产环境——所有用户访问的正式版本。代码合并到 `main` 就意味着上线。
- **`feature/*` 分支**对应预览环境——每个 PR 自动生成的预览链接，只有 PR 参与者能看到。

个人项目通常只需要这两层就够了。如果团队协作需要更多环境（比如 `develop` 分支对应开发环境），部署平台都支持配置，让 Claude Code 帮你设置即可。

## 个人项目需要 GitHub Actions 吗

说实话，大部分个人项目不需要。部署平台内置的"推送即部署"已经覆盖了最核心的需求。

**什么时候该加 GitHub Actions？** 当你有了协作者，或者项目的测试覆盖率上来了。如果你在第九章写了一套测试，希望每次 PR 都自动跑一遍，那就值得加一个 GitHub Actions 配置。

**怎么加？** 直接告诉 Claude Code：

> "帮我配置 GitHub Actions，在每次 PR 时自动运行 lint、build 和 test"

Claude Code 会帮你生成 `.github/workflows/` 下的配置文件，你只需要提交到 GitHub 就生效了。

::: tip 渐进式自动化
不要一开始就追求完美的 CI/CD 流水线。先用平台内置的"推送即部署"，等项目复杂了、有了协作者、有了测试，再逐步加上 GitHub Actions。自动化是为了省事，不是为了折腾。
:::

### 实战案例：本教程的 CI/CD 配置

本教程仓库使用的是 CNB 平台的 CI/CD，配置文件是 `.cnb.yml`。虽然平台不同，但核心思路和 GitHub Actions 完全一样——都是"在什么时候、做什么事"。

**分支策略：**
- `master` 分支推送 → 自动部署到生产环境（`vibe-vibe-production`）
- `develop` 分支推送 → 自动部署到开发环境（`vibe-vibe-develop`）
- PR 创建 → 自动构建验证
- PR 可合并 → 自动 squash merge 并删除源分支

**部署流程（和你的项目一样）：**
```bash
pnpm install --frozen-lockfile  # 安装依赖
pnpm build                       # 构建站点
edgeone pages deploy             # 部署到 EdgeOne Pages
```

**环境变量管理：**
通过 `imports` 引入私密配置文件（类似 GitHub Secrets），避免把 API Token 写在配置里。

**YAML 锚点复用：**
用 `&docs_deploy_pipeline` 定义一次部署流程，然后用 `<<: *docs_deploy_pipeline` 在多个地方复用，避免重复配置。

这个配置展示了一个完整的多环境 CI/CD 流程：开发分支自动部署到测试环境、主分支自动部署到生产环境、PR 自动验证和合并。你的个人项目不需要这么复杂，但当项目成长到需要多环境时，这就是一个可参考的模板。

---

::: info 下一步
CI/CD 配好了，代码推送即上线。接下来了解 [12.4 运维基础与成本优化](./04-operations-cost.md)，学会监控应用状态和控制成本。
:::
