Skip to content

版本发布

概述

版本发布是软件开发周期中的重要环节,它将开发完成的代码打包成可交付的版本。Git 标签结合持续集成工具,可以实现自动化、可追溯的发布流程。

发布流程

标准发布流程

开发完成 → 代码审查 → 合并主分支 → 创建标签 → 构建 → 部署 → 发布说明

详细步骤

1. 准备发布分支

bash
git checkout main
git pull origin main

2. 确认代码状态

bash
git log --oneline -10
git status

3. 更新版本号

在项目文件中更新版本号:

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.0

7. 触发构建

标签推送后自动触发 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 publish

GitLab 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

通过网页界面

  1. 进入仓库页面
  2. 点击 "Releases"
  3. 点击 "Draft a new release"
  4. 选择标签
  5. 填写标题和描述
  6. 上传构建产物
  7. 点击 "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-notes

Release 模板

创建 .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 自动化发布
  • 做好发布前后的检查
  • 保持发布流程可追溯