Appearance
CI/CD 持续集成课程计划
课程概述
本课程分为 8 节课,每节课 20-40 分钟,总时长约 120-150 分钟。通过理论讲解和实践操作,深入理解 CI/CD 的实现方法。
第 1 课:课程介绍与环境准备(5 分钟)
学习目标
- 了解课程内容和目标
- 配置 GitHub Actions
- 准备测试项目
课程内容
课程介绍
- CI/CD 的特点
- 自动化交付的优势
- 课程结构安排
环境准备
- 创建 GitHub 仓库
- 配置 GitHub Actions
- 准备测试项目
实践操作
bash
# 初始化项目
git init
git add .
git commit -m "Initial commit"
# 推送到 GitHub
git remote add origin https://github.com/username/repo.git
git push -u origin main预期输出
✅ GitHub 仓库创建成功
✅ 代码推送到 GitHub第 2 课:CI 基础(15 分钟)
学习目标
- 理解 CI 核心概念
- 掌握 GitHub Actions 语法
- 学习代码检查
课程内容
CI 核心概念
- 持续集成
- 自动化测试
- 快速反馈
GitHub Actions
- 工作流语法
- 触发条件
- 步骤定义
代码检查
- ESLint
- Prettier
- 代码风格
实践操作
yaml
# .github/workflows/ci.yml
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main ]
jobs:
lint:
name: 代码检查
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: 安装依赖
run: npm ci
- name: 运行 ESLint
run: npm run lint测试验证
bash
git add .github/workflows/ci.yml
git commit -m "Add CI workflow"
git push预期输出
✅ CI workflow 运行成功第 3 课:自动化测试(15 分钟)
学习目标
- 理解测试策略
- 掌握单元测试
- 学习集成测试
课程内容
测试策略
- 单元测试
- 集成测试
- 端到端测试
单元测试
- Jest 框架
- 测试覆盖率
- Mock 和 Stub
集成测试
- 测试环境
- 数据库测试
- API 测试
实践操作
javascript
// app.test.js
const request = require('supertest');
const app = require('./app');
describe('API 测试', () => {
test('GET /health', async () => {
const response = await request(app).get('/health');
expect(response.status).toBe(200);
expect(response.body.status).toBe('ok');
});
test('GET /api/users', async () => {
const response = await request(app).get('/api/users');
expect(response.status).toBe(200);
expect(Array.isArray(response.body)).toBe(true);
});
});yaml
# 添加测试任务
test:
name: 测试
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: 安装依赖
run: npm ci
- name: 运行单元测试
run: npm run test:unit
- name: 运行集成测试
run: npm run test:integration测试验证
bash
npm test预期输出
✅ 所有测试通过第 4 课:构建和打包(15 分钟)
学习目标
- 理解构建流程
- 掌握 Docker 镜像构建
- 学习产物管理
课程内容
构建流程
- 代码编译
- 资源打包
- 优化压缩
Docker 镜像
- Dockerfile 编写
- 多阶段构建
- 镜像优化
产物管理
- 上传产物
- 版本管理
- 缓存策略
实践操作
yaml
# 添加构建任务
build:
name: 构建
runs-on: ubuntu-latest
needs: [lint, test]
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: 安装依赖
run: npm ci
- name: 构建应用
run: npm run build
- name: 上传构建产物
uses: actions/upload-artifact@v3
with:
name: dist
path: dist/测试验证
bash
npm run build预期输出
✅ 构建成功第 5 课:CD 基础(20 分钟)
学习目标
- 理解 CD 核心概念
- 掌握自动化部署
- 学习部署策略
课程内容
CD 核心概念
- 持续部署
- 自动化发布
- 零停机部署
自动化部署
- Docker 部署
- SSH 部署
- Kubernetes 部署
部署策略
- 蓝绿部署
- 金丝雀发布
- 滚动更新
实践操作
yaml
# .github/workflows/cd.yml
name: CD
on:
push:
branches: [ main ]
jobs:
deploy:
name: 部署
runs-on: ubuntu-latest
steps:
- name: 检出代码
uses: actions/checkout@v3
- name: 设置 Node.js
uses: actions/setup-node@v3
with:
node-version: '18'
cache: 'npm'
- name: 安装依赖
run: npm ci
- name: 构建应用
run: npm run build
- name: 部署到服务器
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /app
git pull
npm ci --production
npm run build
pm2 restart app测试验证
bash
git push origin main预期输出
✅ 部署成功第 6 课:健康检查和监控(15 分钟)
学习目标
- 理解健康检查机制
- 实现应用监控
- 学习告警通知
课程内容
健康检查
- 健康检查端点
- 依赖检查
- 自动恢复
应用监控
- 指标收集
- 日志收集
- 性能监控
告警通知
- Slack 通知
- 邮件通知
- 短信通知
实践操作
javascript
// 健康检查端点
app.get('/health', async (req, res) => {
try {
// 检查数据库连接
await db.query('SELECT 1');
// 检查 Redis 连接
await redis.ping();
res.json({ status: 'ok', timestamp: Date.now() });
} catch (error) {
res.status(503).json({ status: 'error', message: error.message });
}
});yaml
# 添加健康检查
- name: 健康检查
run: |
sleep 10
curl -f http://${{ secrets.SERVER_HOST }}:3000/health || exit 1测试验证
bash
curl http://localhost:3000/health预期输出
{"status":"ok","timestamp":1234567890}第 7 课:回滚和通知(20 分钟)
学习目标
- 理解回滚机制
- 实现自动回滚
- 学习部署通知
课程内容
回滚机制
- 版本管理
- 自动回滚
- 手动回滚
部署通知
- 成功通知
- 失败通知
- 进度通知
审计日志
- 部署记录
- 操作日志
- 变更历史
实践操作
yaml
# 添加回滚和通知
- name: 部署到服务器
id: deploy
uses: appleboy/ssh-action@master
continue-on-error: true
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /app
git pull
npm ci --production
npm run build
pm2 restart app
- name: 回滚
if: failure() && steps.deploy.outcome == 'failure'
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USERNAME }}
key: ${{ secrets.SERVER_SSH_KEY }}
script: |
cd /app
git checkout HEAD~1
npm ci --production
npm run build
pm2 restart app
- name: 通知部署成功
if: success()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: '部署成功!'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}
- name: 通知部署失败
if: failure()
uses: 8398a7/action-slack@v3
with:
status: ${{ job.status }}
text: '部署失败!'
webhook_url: ${{ secrets.SLACK_WEBHOOK }}测试验证
bash
# 触发部署失败
git push origin main预期输出
✅ 回滚成功第 8 课:总结与扩展(15 分钟)
学习目标
- 回顾课程内容
- 总结核心概念
- 探索扩展方向
课程内容
课程回顾
- CI 基础
- 自动化测试
- 构建和打包
- CD 基础
- 健康检查和监控
- 回滚和通知
核心概念总结
- 持续集成
- 持续部署
- 自动化测试
- 自动化部署
扩展方向
- 多环境部署
- 回滚机制
- 通知机制
- 性能测试
- 安全扫描
实践操作
bash
# 运行所有测试
npm test
# 思考如何扩展功能
# 实现多环境部署、回滚机制等功能预期输出
✅ 所有测试通过学习成果
完成本课程后,你将能够:
- ✅ 理解 CI/CD 的核心概念
- ✅ 配置 GitHub Actions
- ✅ 实现自动化测试
- ✅ 实现自动化部署
- ✅ 实现健康检查和监控
参考资源
下一步
完成本课程后,你可以继续学习:
- Kubernetes 部署
- 微服务架构
- 云原生应用
所有教学材料已保存。准备录制。

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态
