liurenchaxin/docs/development/GRADUAL_DEPLOYMENT_PLAN.md

225 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 六壬神鉴渐进发布计划
## 概述
本计划基于当前的多环境 Git 配置,实现从开发到生产的渐进式发布流程。
## 环境架构
### 当前配置
- **GitHub** (production): `https://github.com/jingminzhang/taigongxinyi.git`
- **Bitbucket** (staging): `git@bitbucket.org:capitaltrain/liurenchaxin.git`
- **Gitea** (development): `https://gitea.tailnet-68f9.ts.net/gitea/liurenchaxin.git`
### 分支策略
```
main (生产环境)
├── staging (预发布环境)
├── develop (开发环境)
└── feature/* (功能分支)
```
## 渐进发布阶段
### 阶段1功能开发 (Development)
**目标环境**: Gitea (development)
**分支**: `feature/*``develop`
#### 流程
1.`develop` 分支创建功能分支
2. 在功能分支上进行开发
3. 完成功能后合并到 `develop`
4. 推送到 Gitea 进行初步测试
#### 验证清单
- [ ] 单元测试通过
- [ ] 代码审查完成
- [ ] 功能测试通过
- [ ] 文档更新完成
### 阶段2集成测试 (Staging)
**目标环境**: Bitbucket (staging)
**分支**: `develop``staging`
#### 流程
1.`develop` 分支创建发布分支 `release/vX.Y.Z`
2. 在 staging 环境部署测试
3. 进行集成测试和用户验收测试
4. 修复发现的问题
5. 合并到 `staging` 分支
6. 推送到 Bitbucket staging 环境
#### 验证清单
- [ ] 集成测试通过
- [ ] 性能测试通过
- [ ] 安全扫描通过
- [ ] 用户验收测试完成
- [ ] 回滚方案准备就绪
### 阶段3灰度发布 (Canary)
**目标环境**: GitHub production (10%流量)
**分支**: `staging``main`
#### 流程
1. 创建灰度发布标签 `vX.Y.Z-canary`
2. 部署到生产环境 10% 流量
3. 监控关键指标 24-48小时
4. 根据监控结果决定全量发布或回滚
#### 监控指标
- [ ] 错误率 < 0.1%
- [ ] 响应时间 < 500ms
- [ ] 用户满意度 > 95%
- [ ] 业务指标正常
### 阶段4全量发布 (Production)
**目标环境**: GitHub production (100%流量)
**分支**: `main`
#### 流程
1. 创建正式版本标签 `vX.Y.Z`
2. 全量部署到生产环境
3. 持续监控 72小时
4. 准备热修复方案
## 发布策略
### 版本命名规范
- **主版本** (X.0.0): 重大功能更新或不兼容变更
- **次版本** (X.Y.0): 新功能添加,向后兼容
- **修订版本** (X.Y.Z): bug修复或小改进
### 发布频率
- **紧急修复**: 随时发布
- **常规更新**: 每2周一次
- **大版本更新**: 每季度一次
### 回滚策略
```bash
# 快速回滚到上一个版本
git revert HEAD
git push origin main --force
# 或使用标签回滚
git checkout vX.Y.Z-1
git tag -a vX.Y.Z-rollback -m "Rollback to vX.Y.Z-1"
git push origin vX.Y.Z-rollback
```
## 自动化工具
### Git 钩子配置
`.git/hooks/` 目录下创建以下钩子:
#### pre-push
```bash
#!/bin/bash
# 检查测试是否通过
pytest tests/
if [ $? -ne 0 ]; then
echo "测试未通过,禁止推送"
exit 1
fi
```
#### pre-commit
```bash
#!/bin/bash
# 代码格式检查
black --check .
flake8 .
```
### CI/CD 配置
创建 `.github/workflows/deploy.yml`
```yaml
name: Gradual Deployment
on:
push:
branches: [staging, main]
release:
types: [published]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run tests
run: |
python -m pytest tests/
deploy-staging:
needs: test
if: github.ref == 'refs/heads/staging'
runs-on: ubuntu-latest
steps:
- name: Deploy to staging
run: echo "Deploying to staging..."
deploy-production:
needs: test
if: github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
steps:
- name: Deploy to production
run: echo "Deploying to production..."
```
## 监控和告警
### 关键指标
- **系统指标**: CPU、内存、磁盘使用率
- **应用指标**: 响应时间、错误率、吞吐量
- **业务指标**: 用户活跃度、功能使用率
### 告警规则
- 错误率 > 1% 触发告警
- 响应时间 > 1秒 触发告警
- 服务不可用 立即告警
## 发布检查清单
### 发布前检查
- [ ] 所有测试通过
- [ ] 代码审查完成
- [ ] 文档已更新
- [ ] 数据库迁移脚本准备就绪
- [ ] 回滚方案已验证
### 发布后检查
- [ ] 服务正常启动
- [ ] 关键功能验证
- [ ] 监控数据正常
- [ ] 用户反馈收集
- [ ] 性能指标对比
## 紧急响应
### 故障处理流程
1. **发现故障** → 立即评估影响范围
2. **5分钟内** → 决定是否回滚
3. **10分钟内** → 执行回滚操作
4. **30分钟内** → 修复问题并验证
5. **1小时内** → 重新发布
### 联系方式
- 技术负责人: ben@capitaltrain.cn
- 运维团队: ops@capitaltrain.cn
- 紧急热线: [待填写]
## 持续改进
### 发布回顾
每次发布后一周内进行回顾会议:
- 分析发布过程中的问题
- 收集用户反馈
- 更新发布流程
- 优化监控指标
### 自动化改进
- 逐步增加自动化测试覆盖率
- 完善监控和告警系统
- 优化部署脚本
- 建立自动化回滚机制