feat: 配置金丝雀/开发/测试渐进发布环境
- 添加渐进发布脚本和文档 - 配置canary/dev/beta三环境部署策略 - 包含快速发布、回滚和状态检查功能
This commit is contained in:
parent
f65ef78d10
commit
cf14f606db
|
|
@ -0,0 +1,102 @@
|
||||||
|
# 金丝雀/开发/测试部署策略
|
||||||
|
|
||||||
|
## 环境命名
|
||||||
|
|
||||||
|
根据新的命名约定,三个环境重新命名为:
|
||||||
|
|
||||||
|
- **canary** (金丝雀环境): `https://gitea.tailnet-68f9.ts.net/gitea/liurenchaxin.git`
|
||||||
|
- **dev** (开发环境): `git@bitbucket.org:capitaltrain/liurenchaxin.git`
|
||||||
|
- **beta** (测试环境): `https://github.com/jingminzhang/taigongxinyi.git`
|
||||||
|
|
||||||
|
## 环境用途
|
||||||
|
|
||||||
|
- **canary (金丝雀)**: 最新功能测试,早期验证
|
||||||
|
- **dev (开发)**: 功能开发和集成测试
|
||||||
|
- **beta (测试)**: 预发布测试,用户验收
|
||||||
|
|
||||||
|
## 部署流程
|
||||||
|
|
||||||
|
### 1. 日常开发流程
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 在 canary 环境开发新功能
|
||||||
|
git checkout develop
|
||||||
|
git pull canary develop
|
||||||
|
# 开发完成后
|
||||||
|
git add .
|
||||||
|
git commit -m "feat: 新功能描述"
|
||||||
|
git push canary develop
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 集成测试流程
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 将功能从 canary 推送到 dev 环境
|
||||||
|
git checkout dev
|
||||||
|
git pull dev main
|
||||||
|
git merge develop
|
||||||
|
git push dev dev:main
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 预发布流程
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 将功能从 dev 推送到 beta 环境
|
||||||
|
git checkout main
|
||||||
|
git pull beta main
|
||||||
|
git merge dev
|
||||||
|
git push beta main
|
||||||
|
```
|
||||||
|
|
||||||
|
## 快速命令
|
||||||
|
|
||||||
|
### 发布新版本
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 金丝雀环境发布
|
||||||
|
./scripts/quick-release.sh 1.2.3 canary
|
||||||
|
|
||||||
|
# 开发环境发布
|
||||||
|
./scripts/quick-release.sh 1.2.3 dev
|
||||||
|
|
||||||
|
# 测试环境发布
|
||||||
|
./scripts/quick-release.sh 1.2.3 beta
|
||||||
|
```
|
||||||
|
|
||||||
|
### 回滚操作
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 回滚金丝雀环境
|
||||||
|
./scripts/rollback.sh canary 1.2.2
|
||||||
|
|
||||||
|
# 回滚开发环境
|
||||||
|
./scripts/rollback.sh dev 1.2.2
|
||||||
|
|
||||||
|
# 回滚测试环境
|
||||||
|
./scripts/rollback.sh beta 1.2.2
|
||||||
|
```
|
||||||
|
|
||||||
|
### 状态检查
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./scripts/check-status.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 分支策略
|
||||||
|
|
||||||
|
- **develop**: 金丝雀环境主分支
|
||||||
|
- **dev**: 开发环境主分支
|
||||||
|
- **main**: 测试环境主分支
|
||||||
|
|
||||||
|
## 标签命名
|
||||||
|
|
||||||
|
- 金丝雀: `v1.2.3-canary`
|
||||||
|
- 开发: `v1.2.3-dev`
|
||||||
|
- 测试: `v1.2.3-beta`
|
||||||
|
|
||||||
|
## 优势
|
||||||
|
|
||||||
|
1. **清晰的命名**: canary/dev/beta 更符合行业标准
|
||||||
|
2. **渐进发布**: 从金丝雀到测试的渐进式验证
|
||||||
|
3. **快速回滚**: 每个环境都可以独立回滚
|
||||||
|
4. **隔离性好**: 不同环境完全隔离,减少干扰
|
||||||
|
|
@ -0,0 +1,196 @@
|
||||||
|
# 六壬神鉴渐进发布流程图
|
||||||
|
|
||||||
|
## 🎯 发布流程概览
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ Development │ │ Staging │ │ Canary │ │ Production │
|
||||||
|
│ (Gitea) │───▶│ (Bitbucket) │───▶│ (GitHub 10%) │───▶│ (GitHub 100%) │
|
||||||
|
│ develop分支 │ │ staging分支 │ │ main分支 │ │ main分支 │
|
||||||
|
└─────────────────┘ └──────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
│ │ │ │
|
||||||
|
│ │ │ │
|
||||||
|
▼ ▼ ▼ ▼
|
||||||
|
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||||||
|
│ 功能开发 │ │ 集成测试 │ │ 灰度验证 │ │ 全量发布 │
|
||||||
|
│ 单元测试 │ │ 性能测试 │ │ 监控验证 │ │ 持续监控 │
|
||||||
|
│ 代码审查 │ │ 安全扫描 │ │ 用户反馈 │ │ 性能优化 │
|
||||||
|
└─────────────────┘ └──────────────────┘ └─────────────────┘ └─────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 快速操作指南
|
||||||
|
|
||||||
|
### 1. 日常开发流程
|
||||||
|
|
||||||
|
#### 开始新功能开发
|
||||||
|
```bash
|
||||||
|
# 从 develop 分支创建功能分支
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git checkout -b feature/new-feature
|
||||||
|
|
||||||
|
# 开发完成后
|
||||||
|
git add .
|
||||||
|
git commit -m "feat: 添加新功能"
|
||||||
|
git push origin feature/new-feature
|
||||||
|
|
||||||
|
# 创建 PR 到 develop 分支
|
||||||
|
# 在 Gitea 上创建 Pull Request
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 推送到开发环境
|
||||||
|
```bash
|
||||||
|
# 一键推送到 Gitea 开发环境
|
||||||
|
git checkout develop
|
||||||
|
git pull origin develop
|
||||||
|
git merge feature/new-feature
|
||||||
|
git push gitea develop
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 预发布流程
|
||||||
|
|
||||||
|
#### 准备 staging 发布
|
||||||
|
```bash
|
||||||
|
# 创建发布分支
|
||||||
|
git checkout staging
|
||||||
|
git merge develop
|
||||||
|
git push staging staging:main
|
||||||
|
|
||||||
|
# 或使用快捷命令
|
||||||
|
git deploy-staging
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 验证 staging 环境
|
||||||
|
```bash
|
||||||
|
# 检查 staging 状态
|
||||||
|
./scripts/check-status.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 灰度发布流程
|
||||||
|
|
||||||
|
#### 启动灰度发布
|
||||||
|
```bash
|
||||||
|
# 创建灰度版本
|
||||||
|
git checkout main
|
||||||
|
git merge staging
|
||||||
|
git tag v1.2.0-canary
|
||||||
|
git push origin main --tags
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 监控灰度状态
|
||||||
|
```bash
|
||||||
|
# 检查发布状态
|
||||||
|
curl -s https://api.github.com/repos/jingminzhang/taigongxinyi/releases/latest
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 全量发布流程
|
||||||
|
|
||||||
|
#### 正式版本发布
|
||||||
|
```bash
|
||||||
|
# 使用快速发布脚本
|
||||||
|
./scripts/quick-release.sh 1.2.0 prod
|
||||||
|
|
||||||
|
# 或手动操作
|
||||||
|
git checkout main
|
||||||
|
git tag v1.2.0
|
||||||
|
git push origin main --tags
|
||||||
|
git deploy-prod
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📊 发布检查清单
|
||||||
|
|
||||||
|
### 开发阶段检查
|
||||||
|
- [ ] 代码通过单元测试
|
||||||
|
- [ ] 功能测试完成
|
||||||
|
- [ ] 代码审查通过
|
||||||
|
- [ ] 文档已更新
|
||||||
|
|
||||||
|
### Staging 阶段检查
|
||||||
|
- [ ] 集成测试通过
|
||||||
|
- [ ] 性能测试完成
|
||||||
|
- [ ] 安全扫描通过
|
||||||
|
- [ ] 用户验收测试完成
|
||||||
|
|
||||||
|
### 灰度发布检查
|
||||||
|
- [ ] 监控指标正常
|
||||||
|
- [ ] 错误率 < 0.1%
|
||||||
|
- [ ] 用户反馈良好
|
||||||
|
- [ ] 业务指标稳定
|
||||||
|
|
||||||
|
### 全量发布检查
|
||||||
|
- [ ] 灰度验证通过
|
||||||
|
- [ ] 回滚方案就绪
|
||||||
|
- [ ] 监控告警配置
|
||||||
|
- [ ] 紧急联系清单
|
||||||
|
|
||||||
|
## 🔄 回滚操作
|
||||||
|
|
||||||
|
### 紧急回滚
|
||||||
|
```bash
|
||||||
|
# 快速回滚到指定版本
|
||||||
|
./scripts/rollback.sh prod 1.1.9
|
||||||
|
|
||||||
|
# 或手动回滚
|
||||||
|
git checkout v1.1.9
|
||||||
|
git tag v1.2.0-rollback
|
||||||
|
git push origin main --force
|
||||||
|
```
|
||||||
|
|
||||||
|
### 回滚验证
|
||||||
|
```bash
|
||||||
|
# 检查回滚状态
|
||||||
|
./scripts/check-status.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📈 监控面板
|
||||||
|
|
||||||
|
### 关键指标监控
|
||||||
|
- **系统性能**: CPU、内存、磁盘使用率
|
||||||
|
- **应用性能**: 响应时间、吞吐量、错误率
|
||||||
|
- **业务指标**: 用户活跃度、功能使用率
|
||||||
|
|
||||||
|
### 告警规则
|
||||||
|
- 错误率 > 1% → 立即告警
|
||||||
|
- 响应时间 > 1s → 立即告警
|
||||||
|
- 服务不可用 → 立即告警
|
||||||
|
|
||||||
|
## 🛠️ 工具命令速查
|
||||||
|
|
||||||
|
| 操作 | 命令 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 查看状态 | `./scripts/check-status.sh` | 检查所有环境状态 |
|
||||||
|
| 快速发布 | `./scripts/quick-release.sh 版本号 环境` | 一键发布到指定环境 |
|
||||||
|
| 紧急回滚 | `./scripts/rollback.sh 环境 版本号` | 快速回滚到指定版本 |
|
||||||
|
| 推送到 staging | `git deploy-staging` | 推送到 Bitbucket staging |
|
||||||
|
| 推送到 prod | `git deploy-prod` | 推送到 GitHub production |
|
||||||
|
| 同步所有远程 | `git sync-all` | 同步所有远程仓库 |
|
||||||
|
|
||||||
|
## 📞 紧急联系
|
||||||
|
|
||||||
|
| 角色 | 联系方式 | 职责 |
|
||||||
|
|------|----------|------|
|
||||||
|
| 技术负责人 | ben@capitaltrain.cn | 技术决策、紧急响应 |
|
||||||
|
| 运维团队 | ops@capitaltrain.cn | 部署、监控、故障处理 |
|
||||||
|
| 产品团队 | product@capitaltrain.cn | 业务决策、用户沟通 |
|
||||||
|
|
||||||
|
## 🎓 最佳实践
|
||||||
|
|
||||||
|
### 1. 分支管理
|
||||||
|
- 功能分支从 `develop` 创建
|
||||||
|
- 发布分支从 `staging` 创建
|
||||||
|
- 热修复分支从 `main` 创建
|
||||||
|
|
||||||
|
### 2. 版本命名
|
||||||
|
- 主版本: 不兼容的重大更新
|
||||||
|
- 次版本: 向后兼容的功能添加
|
||||||
|
- 修订版本: bug修复和微小改进
|
||||||
|
|
||||||
|
### 3. 发布频率
|
||||||
|
- 紧急修复: 随时发布
|
||||||
|
- 常规更新: 每2周一次
|
||||||
|
- 大版本更新: 每季度一次
|
||||||
|
|
||||||
|
### 4. 监控策略
|
||||||
|
- 灰度期间: 24-48小时密切监控
|
||||||
|
- 全量发布: 72小时持续监控
|
||||||
|
- 日常运维: 实时告警监控
|
||||||
|
|
@ -0,0 +1,225 @@
|
||||||
|
# 六壬神鉴渐进发布计划
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
本计划基于当前的多环境 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
|
||||||
|
- 紧急热线: [待填写]
|
||||||
|
|
||||||
|
## 持续改进
|
||||||
|
|
||||||
|
### 发布回顾
|
||||||
|
每次发布后一周内进行回顾会议:
|
||||||
|
- 分析发布过程中的问题
|
||||||
|
- 收集用户反馈
|
||||||
|
- 更新发布流程
|
||||||
|
- 优化监控指标
|
||||||
|
|
||||||
|
### 自动化改进
|
||||||
|
- 逐步增加自动化测试覆盖率
|
||||||
|
- 完善监控和告警系统
|
||||||
|
- 优化部署脚本
|
||||||
|
- 建立自动化回滚机制
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# 环境状态检查脚本
|
||||||
|
|
||||||
|
echo "📊 环境状态检查"
|
||||||
|
echo "=================="
|
||||||
|
|
||||||
|
# Git 状态
|
||||||
|
echo "Git 状态:"
|
||||||
|
git status --short
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 远程仓库状态
|
||||||
|
echo "远程仓库状态:"
|
||||||
|
git remote -v
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 分支状态
|
||||||
|
echo "分支状态:"
|
||||||
|
git branch -a
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 最新标签
|
||||||
|
echo "最新标签:"
|
||||||
|
git tag --sort=-version:refname | head -5
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 提交历史
|
||||||
|
echo "最近提交:"
|
||||||
|
git log --oneline -5
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# 快速发布脚本
|
||||||
|
|
||||||
|
VERSION=$1
|
||||||
|
ENV=$2
|
||||||
|
|
||||||
|
if [ -z "$VERSION" ] || [ -z "$ENV" ]; then
|
||||||
|
echo "用法: ./quick-release.sh <版本号> <环境>"
|
||||||
|
echo "环境选项: dev/staging/prod"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $ENV in
|
||||||
|
canary)
|
||||||
|
git checkout develop
|
||||||
|
git tag "v${VERSION}-canary"
|
||||||
|
git push canary develop --tags
|
||||||
|
;;
|
||||||
|
dev)
|
||||||
|
git checkout dev
|
||||||
|
git tag "v${VERSION}-dev"
|
||||||
|
git push dev dev:main --tags
|
||||||
|
;;
|
||||||
|
beta)
|
||||||
|
git checkout main
|
||||||
|
git tag "v${VERSION}-beta"
|
||||||
|
git push beta main --tags
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "无效的环境选项: canary/dev/beta"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "✅ 发布完成: v${VERSION}-${ENV}"
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# 快速回滚脚本
|
||||||
|
|
||||||
|
ENV=$1
|
||||||
|
VERSION=$2
|
||||||
|
|
||||||
|
if [ -z "$ENV" ] || [ -z "$VERSION" ]; then
|
||||||
|
echo "用法: ./rollback.sh <环境> <版本号>"
|
||||||
|
echo "环境选项: staging/prod"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $ENV in
|
||||||
|
canary)
|
||||||
|
git checkout develop
|
||||||
|
git reset --hard "v${VERSION}-canary"
|
||||||
|
git push canary develop --force
|
||||||
|
;;
|
||||||
|
dev)
|
||||||
|
git checkout dev
|
||||||
|
git reset --hard "v${VERSION}-dev"
|
||||||
|
git push dev dev:main --force
|
||||||
|
;;
|
||||||
|
beta)
|
||||||
|
git checkout main
|
||||||
|
git reset --hard "v${VERSION}-beta"
|
||||||
|
git push beta main --force
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "无效的环境选项: canary/dev/beta"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "✅ 回滚完成: ${ENV} -> v${VERSION}"
|
||||||
|
|
@ -0,0 +1,229 @@
|
||||||
|
#!/bin/bash
|
||||||
|
# 六壬神鉴渐进发布环境配置脚本
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "🚀 配置渐进发布环境..."
|
||||||
|
|
||||||
|
# 1. 配置 Git 别名简化操作
|
||||||
|
echo "配置 Git 别名..."
|
||||||
|
git config alias.deploy-staging '!git push staging staging:main'
|
||||||
|
git config alias.deploy-prod '!git push origin main'
|
||||||
|
git config alias.sync-all '!git fetch --all && git push --all'
|
||||||
|
git config alias.release-start '!git checkout develop && git pull && git checkout -b release/'
|
||||||
|
git config alias.release-finish '!git checkout main && git merge staging && git tag -a'
|
||||||
|
|
||||||
|
# 2. 创建发布分支
|
||||||
|
echo "创建发布分支..."
|
||||||
|
git checkout -b staging 2>/dev/null || git checkout staging
|
||||||
|
git checkout -b develop 2>/dev/null || git checkout develop
|
||||||
|
|
||||||
|
# 3. 推送分支到所有远程仓库
|
||||||
|
echo "推送分支到所有远程仓库..."
|
||||||
|
git push origin staging:staging 2>/dev/null || true
|
||||||
|
git push origin develop:develop 2>/dev/null || true
|
||||||
|
git push staging staging:main 2>/dev/null || true
|
||||||
|
git push staging develop:develop 2>/dev/null || true
|
||||||
|
|
||||||
|
# 4. 设置分支保护(需要管理员权限)
|
||||||
|
echo "设置分支保护规则..."
|
||||||
|
echo "⚠️ 请在 GitHub/GitLab/Gitea 后台手动设置以下分支保护:"
|
||||||
|
echo "- main 分支:需要 PR 审查,禁止直接推送"
|
||||||
|
echo "- staging 分支:需要 PR 审查,禁止直接推送"
|
||||||
|
echo "- develop 分支:需要 PR 审查,禁止直接推送"
|
||||||
|
|
||||||
|
# 5. 创建发布标签模板
|
||||||
|
echo "创建发布标签模板..."
|
||||||
|
cat > .gitmessage.txt << 'EOF'
|
||||||
|
# 发布标签模板
|
||||||
|
# 格式:v主版本.次版本.修订版本-环境
|
||||||
|
#
|
||||||
|
# 示例:
|
||||||
|
# v1.2.0-canary (灰度发布)
|
||||||
|
# v1.2.0 (正式版本)
|
||||||
|
# v1.2.1-hotfix (热修复)
|
||||||
|
#
|
||||||
|
# 环境标识:
|
||||||
|
# -canary: 灰度发布
|
||||||
|
# -staging: 预发布测试
|
||||||
|
# -hotfix: 紧急修复
|
||||||
|
# 无后缀:正式版本
|
||||||
|
|
||||||
|
发布类型: [feature/bugfix/hotfix/docs]
|
||||||
|
影响范围: [core/api/ui/config]
|
||||||
|
测试状态: [passed/failed/pending]
|
||||||
|
回滚策略: [已准备/无需回滚]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
git config commit.template .gitmessage.txt
|
||||||
|
|
||||||
|
# 6. 创建快速发布脚本
|
||||||
|
cat > scripts/quick-release.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
# 快速发布脚本
|
||||||
|
|
||||||
|
VERSION=$1
|
||||||
|
ENV=$2
|
||||||
|
|
||||||
|
if [ -z "$VERSION" ] || [ -z "$ENV" ]; then
|
||||||
|
echo "用法: ./quick-release.sh <版本号> <环境>"
|
||||||
|
echo "环境选项: dev/staging/prod"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $ENV in
|
||||||
|
dev)
|
||||||
|
git checkout develop
|
||||||
|
git tag "v${VERSION}-dev"
|
||||||
|
git push gitea develop --tags
|
||||||
|
;;
|
||||||
|
staging)
|
||||||
|
git checkout staging
|
||||||
|
git tag "v${VERSION}-staging"
|
||||||
|
git push staging staging:main --tags
|
||||||
|
;;
|
||||||
|
prod)
|
||||||
|
git checkout main
|
||||||
|
git tag "v${VERSION}"
|
||||||
|
git push origin main --tags
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "无效的环境选项"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "✅ 发布完成: v${VERSION}-${ENV}"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x scripts/quick-release.sh
|
||||||
|
|
||||||
|
# 7. 创建回滚脚本
|
||||||
|
cat > scripts/rollback.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
# 快速回滚脚本
|
||||||
|
|
||||||
|
ENV=$1
|
||||||
|
VERSION=$2
|
||||||
|
|
||||||
|
if [ -z "$ENV" ] || [ -z "$VERSION" ]; then
|
||||||
|
echo "用法: ./rollback.sh <环境> <版本号>"
|
||||||
|
echo "环境选项: staging/prod"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
case $ENV in
|
||||||
|
staging)
|
||||||
|
git checkout staging
|
||||||
|
git reset --hard "v${VERSION}-staging"
|
||||||
|
git push staging staging:main --force
|
||||||
|
;;
|
||||||
|
prod)
|
||||||
|
git checkout main
|
||||||
|
git reset --hard "v${VERSION}"
|
||||||
|
git push origin main --force
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "无效的环境选项"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
echo "✅ 回滚完成: ${ENV} -> v${VERSION}"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x scripts/rollback.sh
|
||||||
|
|
||||||
|
# 8. 创建状态检查脚本
|
||||||
|
cat > scripts/check-status.sh << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
# 环境状态检查脚本
|
||||||
|
|
||||||
|
echo "📊 环境状态检查"
|
||||||
|
echo "=================="
|
||||||
|
|
||||||
|
# Git 状态
|
||||||
|
echo "Git 状态:"
|
||||||
|
git status --short
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 远程仓库状态
|
||||||
|
echo "远程仓库状态:"
|
||||||
|
git remote -v
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 分支状态
|
||||||
|
echo "分支状态:"
|
||||||
|
git branch -a
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 最新标签
|
||||||
|
echo "最新标签:"
|
||||||
|
git tag --sort=-version:refname | head -5
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 提交历史
|
||||||
|
echo "最近提交:"
|
||||||
|
git log --oneline -5
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x scripts/check-status.sh
|
||||||
|
|
||||||
|
# 9. 创建 GitHub Actions 工作流目录
|
||||||
|
mkdir -p .github/workflows
|
||||||
|
|
||||||
|
# 10. 创建部署验证
|
||||||
|
echo "创建部署验证..."
|
||||||
|
cat > .github/workflows/deploy-validation.yml << 'EOF'
|
||||||
|
name: Deploy Validation
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [develop, staging, main]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
validate:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Python
|
||||||
|
uses: actions/setup-python@v4
|
||||||
|
with:
|
||||||
|
python-version: '3.9'
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
python -m pytest tests/ -v
|
||||||
|
|
||||||
|
- name: Validate code style
|
||||||
|
run: |
|
||||||
|
pip install black flake8
|
||||||
|
black --check .
|
||||||
|
flake8 .
|
||||||
|
|
||||||
|
- name: Security scan
|
||||||
|
run: |
|
||||||
|
pip install safety bandit
|
||||||
|
safety check
|
||||||
|
bandit -r . -f json -o security-report.json
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "✅ 渐进发布环境配置完成!"
|
||||||
|
echo ""
|
||||||
|
echo "📋 使用指南:"
|
||||||
|
echo "1. 查看状态: ./scripts/check-status.sh"
|
||||||
|
echo "2. 快速发布: ./scripts/quick-release.sh 1.0.0 staging"
|
||||||
|
echo "3. 紧急回滚: ./scripts/rollback.sh prod 1.0.0"
|
||||||
|
echo "4. Git 别名: git deploy-staging, git deploy-prod"
|
||||||
|
echo ""
|
||||||
|
echo "📚 详细文档: docs/development/GRADUAL_DEPLOYMENT_PLAN.md"
|
||||||
Loading…
Reference in New Issue