GitHub Actions 实战:CI/CD 流水线从零搭建
GitHub Actions 实战:CI/CD 流水线从零搭建
基本概念
GitHub Actions 用 workflow(YAML 文件,放 .github/workflows/)描述自动化流程。结构:
- on:触发条件(push、pull_request、tag、手动)
- jobs:一组任务,默认并行,可设 needs 串行
- steps:job 内的步骤,可执行命令或引用 action
- 每个 job 跑在一台 runner(GitHub 托管的虚拟机或自建)
Node 项目完整 CI
name: CI
on:
push:
branches: [main]
pull_request:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: npm # 自动按 lock 文件缓存 node_modules 下载
- run: npm ci # CI 专用:严格按 lock 文件干净安装
- run: npm run lint
- run: npm run test
- run: npm run build
npm ci 与 npm install 的区别:严格按 lock 文件、不修改它、速度快且可复现,是 CI 标准用法。
缓存策略
除了 setup-node 的内置缓存,自定义缓存用 actions/cache(如构建产物、Prisma 引擎)。缓存 key 带 lock 文件哈希,依赖变了自动失效。
部署(CD)
构建通过后部署到服务器,常见方式:
deploy:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 方式一:SSH 到服务器执行部署脚本
- name: Deploy
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.SERVER_HOST }}
username: deploy
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/app
git pull
npm ci
npm run build
pm2 reload ecosystem.config.cjs
Secrets 管理
密码、密钥一律放仓库 Settings → Secrets,配置里用 ${{ secrets.XXX }} 引用,日志会自动脱敏。永远不要把凭据写进 workflow 或提交进仓库。
实用经验
- PR 必须等 CI 变绿才能合并(分支保护规则开启)
- 部署步骤加超时和失败通知,避免挂死
- 利用 matrix 做多版本测试(node 18/20/22)
- 部署到 Serverless/Vercel 等平台有官方 action,更简单
- workflow 也能跑定时任务(on.schedule)、issue 自动化
CI/CD 的收益:把"检查质量"和"上线发布"从手工操作变成可靠的自动化,一次配置长期受益。
看到这里了?如果这篇文章帮到过你
请我喝瓶可乐就好 🥤

评论0 条
还没有评论,来抢沙发~