大家好,我是程序员柏风,AI 最全的 Vibecoding 学习地图 http://coderoadmap.cn 作者。
Checkpoint: CI/CD 流水线
你将完成什么
用 GitHub Actions 实现自动化:
- 代码提交后自动测试
- 测试通过后自动部署到服务器
验收标准
- 每次 push 到 main 分支触发 CI
- CI 通过后自动部署
- 部署失败可回滚
GitHub Actions 配置
# .github/workflows/deploy.yml
name: Deploy
on:
push:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: Install dependencies
run: |
cd server && npm ci
cd ../client && npm ci
- name: Run tests
run: |
cd server && npm test
cd ../client && npm test
- name: Build frontend
run: |
cd client && npm run build
deploy:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Deploy to server
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
script: |
cd /var/www/todo
git pull origin main
cd server && npm install --production
cd ../client && npm install && npm run build
pm2 restart todo-api
sudo nginx -t && sudo systemctl restart nginx
配置 Secrets
GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret:
SERVER_HOST:服务器 IPSERVER_USER:SSH 用户名SSH_KEY:SSH 私钥内容
常见卡点
- SSH 连接失败:确认私钥正确,服务器防火墙允许 GitHub Actions IP。
- 部署命令失败:在服务器上手动执行一遍,确认无误。
- 环境变量没传:在服务器
.env文件里配置,不要写在 CI 里。
蓝绿部署(进阶)
# 部署到新目录
cd /var/www/todo-green
git pull origin main
npm install
npm run build
# 切换 Nginx 指向新目录
sudo sed -i 's/todo-blue/todo-green/' /etc/nginx/sites-available/todo
sudo nginx -s reload
# 如果出问题,快速回滚
sudo sed -i 's/todo-green/todo-blue/' /etc/nginx/sites-available/todo
sudo nginx -s reload
下一步
完成本课后,你已完成全栈路线图的全部阶段。继续深入学习:
- 微服务架构
- Kubernetes 容器编排
- 性能优化
- 安全防护