Appearance
版本发布
概述
版本发布是软件开发周期中的重要环节,它将开发完成的代码打包成可交付的版本。Git 标签结合持续集成工具,可以实现自动化、可追溯的发布流程。
发布流程
标准发布流程
开发完成 → 代码审查 → 合并主分支 → 创建标签 → 构建 → 部署 → 发布说明详细步骤
1. 准备发布分支
bash
git checkout main
git pull origin main2. 确认代码状态
bash
git log --oneline -10
git status3. 更新版本号
在项目文件中更新版本号:
json
{
"version": "1.1.0"
}4. 提交版本更新
bash
git add package.json
git commit -m "chore: bump version to 1.1.0"5. 创建标签
bash
git tag -a v1.1.0 -m "Release version 1.1.0"6. 推送代码和标签
bash
git push origin main
git push origin v1.1.07. 触发构建
标签推送后自动触发 CI/CD 构建。
8. 发布到生产环境
通过 CI/CD 或手动部署到生产环境。
9. 编写发布说明
在 GitHub/GitLab 创建 Release。
使用发布分支
创建发布分支:
bash
git checkout -b release/v1.1.0 develop在发布分支上修复 Bug:
bash
git add .
git commit -m "fix: release critical bug"合并到主分支:
bash
git checkout main
git merge --no-ff release/v1.1.0
git tag -a v1.1.0 -m "Release version 1.1.0"合并回开发分支:
bash
git checkout develop
git merge --no-ff release/v1.1.0删除发布分支:
bash
git branch -d release/v1.1.0紧急修复发布
从标签创建修复分支:
bash
git checkout -b hotfix/v1.1.1 v1.1.0修复问题:
bash
git add .
git commit -m "fix: critical security issue"创建修复标签:
bash
git tag -a v1.1.1 -m "Hotfix version 1.1.1"推送修复:
bash
git push origin hotfix/v1.1.1
git push origin v1.1.1使用标签发布
标签触发发布
配置 CI/CD 在标签推送时自动发布:
GitHub Actions 示例:
yaml
name: Release
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build
run: npm run build
- name: Publish
run: npm publishGitLab CI 示例:
yaml
release:
stage: deploy
only:
- tags
script:
- npm run build
- npm publish版本号提取
从标签提取版本号:
bash
VERSION=${GITHUB_REF#refs/tags/v}
echo "Version: $VERSION"构建产物
为每个版本生成构建产物:
bash
npm run build
tar -czf app-v1.1.0.tar.gz dist/GitHub Releases
创建 Release
通过网页界面:
- 进入仓库页面
- 点击 "Releases"
- 点击 "Draft a new release"
- 选择标签
- 填写标题和描述
- 上传构建产物
- 点击 "Publish release"
通过 GitHub CLI:
bash
gh release create v1.1.0 \
--title "Version 1.1.0" \
--notes "Release notes here" \
./dist/app.zip自动生成发布说明:
bash
gh release create v1.1.0 --generate-notesRelease 模板
创建 .github/RELEASE_TEMPLATE.md:
markdown
## 变更概述
简要描述本次发布的主要内容
## 新功能
- 功能 A 描述
- 功能 B 描述
## Bug 修复
- 修复问题 A
- 修复问题 B
## 破坏性变更
- 变更 A 及其影响
## 升级指南
升级步骤和注意事项
## 贡献者
感谢以下贡献者:
- @user1
- @user2上传构建产物
bash
gh release upload v1.1.0 ./dist/app.zip ./dist/app.tar.gz下载 Release 资源
bash
gh release download v1.1.0查看 Release 列表
bash
gh release list删除 Release
bash
gh release delete v1.1.0发布说明编写
发布说明结构
markdown
# 版本 1.1.0
发布日期:2024-01-15
## 🚀 新功能
### 用户认证
- 添加 OAuth2.0 登录支持
- 实现双因素认证
- 添加密码重置功能
### 数据导出
- 支持 CSV 格式导出
- 支持 Excel 格式导出
- 添加批量导出功能
## 🐛 Bug 修复
- 修复登录超时问题 (#123)
- 解决数据同步错误 (#124)
- 修复移动端显示异常 (#125)
## 💡 优化
- 优化数据库查询性能
- 减少内存占用
- 提升页面加载速度
## ⚠️ 破坏性变更
- API 接口 `/api/user` 返回格式变更
- 配置项 `auth.timeout` 已移除
## 📦 依赖更新
- 升级 React 到 18.2.0
- 升级 Node.js 最低版本到 18
## 📝 升级指南
### 配置更新
更新 `config.json` 中的认证配置:
```json
{
"auth": {
"oauth": {
"enabled": true,
"provider": "google"
}
}
}数据库迁移
运行数据库迁移脚本:
bash
npm run migrate👥 贡献者
感谢以下贡献者参与本次发布: @user1, @user2, @user3
### 自动生成发布说明
**使用 GitHub CLI**:
```bash
gh release create v1.1.0 --generate-notes使用 Git 日志:
bash
git log v1.0.0..v1.1.0 --oneline --pretty=format:"- %s"使用约定式提交生成:
bash
git log v1.0.0..v1.1.0 --pretty=format:"%s" | grep "^feat" | sed 's/^feat:/- /'
git log v1.0.0..v1.1.0 --pretty=format:"%s" | grep "^fix" | sed 's/^fix:/- /'发布说明最佳实践
清晰分类:
- 新功能
- Bug 修复
- 优化改进
- 破坏性变更
- 依赖更新
提供上下文:
- 关联 Issue 编号
- 关联 PR 编号
- 提供升级指南
使用图标增强可读性:
- 🚀 新功能
- 🐛 Bug 修复
- 💡 优化
- ⚠️ 破坏性变更
- 📦 依赖更新
- 📝 文档更新
发布检查清单
发布前检查
- [ ] 所有测试通过
- [ ] 代码审查完成
- [ ] 版本号已更新
- [ ] CHANGELOG 已更新
- [ ] 文档已更新
- [ ] 依赖已更新
- [ ] 安全漏洞已扫描
发布时检查
- [ ] 标签已创建
- [ ] 构建成功
- [ ] 部署成功
- [ ] Release 已发布
- [ ] 发布说明已编写
发布后检查
- [ ] 生产环境验证
- [ ] 监控告警正常
- [ ] 用户通知已发送
- [ ] 文档已更新
自动化发布
使用语义化发布
安装 semantic-release:
bash
npm install -D semantic-release配置 .releaserc.json:
json
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
"@semantic-release/changelog",
"@semantic-release/npm",
"@semantic-release/github"
]
}使用标准版本
安装 standard-version:
bash
npm install -D standard-version运行发布:
bash
npm run release
npm run release -- --first-release发布脚本示例
bash
#!/bin/bash
VERSION=$1
if [ -z "$VERSION" ]; then
echo "Usage: ./release.sh <version>"
exit 1
fi
echo "Releasing version $VERSION..."
git checkout main
git pull origin main
npm test || exit 1
npm version $VERSION -m "chore: release %s"
git push origin main --tags
gh release create v$VERSION --generate-notes
echo "Release $VERSION completed!"总结
- 遵循标准化的发布流程
- 使用标签标记发布版本
- 编写详细的发布说明
- 利用 CI/CD 自动化发布
- 做好发布前后的检查
- 保持发布流程可追溯
