到目前为止,我们的很多检查都是手动完成的。例如修改代码后,我们可能会自己运行程序、执行测试,然后确认没有问题再创建 Pull Request。
但如果每一次 Push 都需要开发者自己记得运行所有检查,很容易遗漏。
这时就可以使用 CI/CD。
CI/CD 是软件开发中非常常见的自动化概念。对于基础教程来说,不需要深入理解所有细节,只要先知道:
当代码发生变化时,可以让服务器自动执行测试、Build,甚至自动部署。
GitHub 提供的这套自动化功能叫做 GitHub Actions。
什么是 CI?
持续集成(Continuous Integration,CI) 指的是开发者不断把代码修改合并到项目中,同时系统自动运行检查。
例如每次有人 Push:
feature/login或者创建 Pull Request 后,GitHub 可以自动执行:
安装依赖 → 运行测试 → 检查代码格式 → Build 项目
如果全部成功,PR 页面可能显示:
All checks have passed如果测试失败,则可能显示:
Some checks were not successful这样 Reviewer 在 Merge 之前就能知道新的代码有没有破坏现有功能。
什么是 CD?
CD 通常和部署相关。根据不同团队,它可能表示 Continuous Delivery 或 Continuous Deployment。
对于入门学习,可以先简单理解为:
代码通过检查以后,可以进一步自动发布或者部署。
例如:
代码 Merge 到 main → 自动运行测试 → 自动 Build → 自动部署网站
如果一个网站部署在服务器或云平台上,就有可能做到 Merge 到 main 后自动发布最新版本,而不需要开发者每次手动上传文件。
什么是 GitHub Actions?
GitHub Actions 是 GitHub 提供的自动化系统。
它通过一种叫做 Workflow 的配置来决定什么时候运行,以及需要执行哪些任务。
Workflow 文件通常放在项目的:
.github/workflows/目录中。
例如:
.github/
workflows/
ci.yml
文件通常使用 YAML 格式编写。
一个非常简单的 Workflow 可能会在每次 Push 时运行:
name: CI
on:
push:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "Run tests here"对于零基础读者来说,现在并不需要记住这些 YAML 语法。只需要理解这个文件是在告诉 GitHub:
什么时候运行
+
在哪里运行
+
运行什么命令Workflow 是什么时候运行的?
GitHub Actions 可以针对很多事件运行。
最常见的包括:
Push
Pull Request
手动触发例如一个 Workflow 可以设置:
每次 Push → 运行测试
也可以设置:
每次创建或更新 Pull Request → 运行测试
因此一个典型的 PR 流程可能变成:
Push Branch → 创建 Pull Request → GitHub Actions 自动运行 → Tests → Build → Lint → 通过 → Merge
这就是 CI 在日常团队开发中的一个典型应用。
常见的自动化任务
不同项目会运行不同的任务。
例如 Python 项目可能运行:
pytestJavaScript 项目可能运行:
npm test或者:
npm run build有些项目还会运行 Lint,也就是自动检查代码风格或潜在问题。
例如整个 Workflow 可以做:
安装依赖 → Lint → Unit Tests → Build
如果其中任何一步失败,GitHub 就会把整个检查标记为失败。
CI 为什么很重要?
假设一个项目有 20 个开发者。如果要求每个人在提交前都手动执行完全相同的一组命令,很难保证所有人都不会忘记。
GitHub Actions 可以让这些检查自动发生。
无论是谁提交代码:
Alice Push
Bob Push
Chris PushGitHub 都可以运行相同的 Workflow。
这样团队就有了一套统一的自动检查标准。
CI 失败以后怎么办?
假设你创建 Pull Request 后看到:
1 failing check通常不应该直接忽略它并 Merge。
可以点击失败的 GitHub Actions Job,查看运行日志。
例如可能看到:
Test failed:
Expected 200
Received 500这说明某个测试失败。
你可以回到本地 Branch 修复代码:
git switch feature/login修改后:
git add .
git commit -m "Fix failing login test"
git pushGitHub Actions 会再次自动运行。
如果这次成功,就会显示检查通过。
知识测验
CI/CD 和 Git 的关系
Git 本身并不提供 CI/CD。
Git 负责:
Commit
Branch
Merge
HistoryGitHub Actions 则是在 GitHub 上根据这些 Git 操作触发自动任务。
例如:
Git Push → GitHub 收到新的 Commit → GitHub Actions 启动 → 运行测试
所以 Git 和 CI/CD 是不同的东西,但在现代开发流程中经常一起使用。
练习
某个 PR 的 Actions 日志显示 npm test 中 login.test.js 失败。请写出从阅读日志、本地复现、修复、验证到更新 PR 的具体处理步骤。