前言:
软件发布一个版本,通常指将开发完成、测试通过的系统打包并正式交付使用。这一过程既可以是内部交付,也可以是对外发布。下面分为 “版本定义” → “流程步骤” → “工具与规范” 三个部分。
一、版本发布的基本概念
-
版本号(Version):如
v1.0.0
,遵循语义化版本(SemVer):
主版本号.次版本号.修订号(例如 2.1.4)
- 主版本号:大变更,不兼容老版本(如重构接口)
- 次版本号:功能增强,兼容老版本
- 修订号:Bug 修复或细节优化
-
预发布标签:
-alpha
(开发阶段)、-beta
(测试版)、-rc
(候选发布)
二、发布一个版本的典型流程
假设是一个后端项目(例如 Spring Boot + MySQL + Redis 项目),发布流程如下:
1. 确定版本内容
-
确认功能开发完成、Bug 修复到位
-
确认接口/数据库等变更已评审
-
撰写变更日志(CHANGELOG)
2. 代码冻结(Code Freeze)
-
暂停新功能合并,专注于测试和修复
-
使用 Git 打上版本标签,例如:
git tag -a v1.2.0 -m "Release version 1.2.0"
git push origin v1.2.0
3. 编译打包
-
使用构建工具:
-
Java:
Maven
或Gradle
-
mvn clean package -Pprod
- Node:
npm run build
-
构建产物可以是
.jar
、.war
、.zip
、Docker 镜像等
4. 发布前测试(灰度测试)
-
在 staging 或 test 环境验证:
-
接口是否可用?
-
数据库是否兼容?
-
日志是否正常?
-
MQ/Redis 等中间件是否联通?
-
5. 正式发布上线
可选方案:
发布方式 | 描述 |
---|---|
手动部署 | 拷贝 jar 包到服务器,重启服务 |
CI/CD | 使用 Jenkins、GitLab CI、Gitea Actions 等自动部署 |
容器化 | 使用 Docker/K8s 进行镜像发布 |
灰度发布 | 只对部分用户或 IP 生效,观察一段时间再全量发布 |
6. 回滚机制准备
-
保留上一个稳定版本
-
使用 Git 分支 + tag + 二进制包快速回退
-
数据变更要支持回滚或有备份(数据库脚本版本控制)
三、版本发布的工具与规范
类别 | 推荐工具 |
---|---|
版本控制 | Git(+ tag/branch) |
构建工具 | Maven / Gradle / npm / webpack |
发布管理 | GitHub Release / GitLab Release / Nexus / JFrog Artifactory |
自动部署 | Jenkins / GitLab CI / ArgoCD / Docker + K8s |
版本说明 | CHANGELOG.md ,配合 Keep a Changelog |
例1:Java 后端发布流程
git checkout master
git pull
# 修改版本号
mvn versions:set -DnewVersion=1.2.0
git commit -am "chore: bump version to 1.2.0"
git tag -a v1.2.0 -m "Release 1.2.0"
git push origin master --tags
# 构建 jar
mvn clean package -Pprod
# 上传或拷贝到服务器
scp target/your-app.jar user@your-server:/home/app
# 重启服务
ssh user@your-server "systemctl restart your-app"
结语:
发布一个版本是研发周期中非常关键的一步,既需要流程规范,也依赖工具自动化来确保安全、可控和高效。如果你想我帮你写一个发布脚本、Jenkins流水线或者 Dockerfile,都可以告诉我你项目的结构和需求。