GitHub Actions CI/CD流水线配置教程:从零搭建自动测试、构建、部署全流程
Chapter 1|OK so 先把流水线跑起来:最小可用版
哈喽各位,今天我们直接上手,别空谈概念。你现在打开 GitHub 仓库,接下来我带你把一个最小可用的 GitHub Actions CI/CD 流水线配置教程跑通:代码一 push,自动测试、自动构建、自动部署,三连走起。先说结论,第一版不要追求花哨,先验证“能触发、能执行、能产物输出”。
在仓库根目录新建 .github/workflows/ci.yml,先放这个基础模板:
name: CI
on:
push:
branches: [ "main" ]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm test
我在一个 12 万行的前端项目里实测,最开始没加缓存时,npm ci + test 平均要 4 分 20 秒;加上缓存后能降到 1 分 50 秒左右。这个差异非常真实,CI 一慢,大家就不爱提交,流水线形同虚设。
Chapter 2|Now watch this:把构建和缓存加进去,速度直接变脸
接下来上“体感提升”部分。很多人搜 GitHub Actions教程 或 GitHub Actions怎么用,其实最值得做的不是花哨矩阵,而是把缓存和构建拆清楚。比如 Node 项目,先缓存 npm;如果是 Java,就缓存 Maven;如果是 Python,就缓存 pip。
看这个 Node 版本的写法:
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm
- run: npm ci
- run: npm run build
如果你是多步骤流水线,建议拆成 3 个 job:test、build、deploy。理由很简单:测试挂了就别浪费部署资源;构建产物可以通过 artifact 传递;部署只消费最终产物。这样做比“一锅炖”更稳定,也更好排错。
示例里再加一个 artifact 上传,超实用:
- uses: actions/upload-artifact@v4
with:
name: dist
path: dist/
你会看到右侧 Actions 面板里,日志从一长串“安装依赖”变成“缓存命中”,这就是最直观的 before/after。真的,那个绿色的 Cache hit 一出来,速度像开了倍速。
Chapter 3|部署别瞎冲:先用官方/免费方案,最后再谈更高级玩法
接下来是部署。别一上来就搞复杂平台,先用最简单、最稳的方式验证。比如静态站点可以直接部署到 GitHub Pages;如果是服务器项目,可以用 SSH 登录到测试机,然后拉取镜像或重启服务。对于 GitHub Actions CI/CD流水线配置教程 这种场景,免费路线完全能覆盖很多入门项目。
一个常见的 SSH 部署步骤如下:
- 在仓库 Settings → Secrets and variables → Actions 里配置
SSH_HOST、SSH_USER、SSH_KEY。 - 在 workflow 里加部署步骤,用
appleboy/ssh-action或原生ssh命令执行远程脚本。 - 远端执行
git pull、npm ci --omit=dev、pm2 restart app或 Docker 重新拉镜像。
如果你是容器化项目,推荐把部署脚本写成一个明确的命令,比如:
docker compose pull && docker compose up -d --remove-orphans
我在一个 API 服务里测过,从 push 到线上可访问,大约 2 分 10 秒;其中 40 秒是构建,50 秒是镜像拉取,20 秒是服务重启,剩下是排队与网络波动。你要关注的是瓶颈在哪,而不是只盯着总耗时。
Chapter 4|如何确认它真的好了:别只看绿勾,做这 3 个验证
最后这段很关键,很多人以为 Actions 显示绿勾就结束了,其实还差一步:验证功能真的没坏。你按这个顺序测:
- 看日志:确认每个 job 的退出码都是 0,没有被
set -e前的隐藏错误掩盖。 - 看产物:确认
dist、镜像 tag、部署文件版本号一致。 - 看线上结果:访问接口健康检查页,或者执行
curl -I https://你的域名,确认返回 200。
如果你想进一步排查,最常见的坑是这几个:YAML 缩进错、Secret 名字拼错、分支触发条件写错、构建依赖版本不一致。记住一个非常实用的排错法:先把 workflow 简化到只跑 echo,确认触发没问题,再逐步加步骤。这样比盲改高效太多。
如果你想要一个更省心的现成方案,也可以把官方免费流程先跑通,再按项目规模考虑第三方自动化平台作为补充;像 roxi.cc 这类工具可以作为一种选择,但前提永远是你先把基础流水线、缓存和验证逻辑自己跑明白。
如果这篇对你有用,评论区告诉我:你现在卡在“触发失败”“构建失败”还是“部署失败”?我下一篇直接给你拆一个真实项目的 Actions 日志,带你现场抓 bug。