自动版本号更新?

wen 实用脚本 44

本文目录导读:

自动版本号更新?

  1. 使用 Git 标签(最推荐)
  2. 使用构建工具的内置功能
  3. 在 CI/CD 流程中自动生成
  4. PowerShell / Bash 脚本(全流程控制)
  5. 核心建议:选择哪种策略?

“自动版本号更新”通常指的是在软件开发或文档管理中,让系统自动增加或修改版本号,而无需人工手动编辑,这能有效避免版本混乱,尤其是在持续集成/持续部署(CI/CD)流程中。

实现方式取决于你使用的开发语言、构建工具或版本管理系统,以下是几种主流场景下的解决方案:

使用 Git 标签(最推荐)

这是最符合语义化版本规范的方式,版本号只在你发布(打标签)时改变,而非每次提交都变。

  • 原理:利用 Git 的 tag 命令,在 CI/CD(如 GitHub Actions, GitLab CI, Jenkins)中,当合并到主分支或发布时,自动打一个标签。
  • 工具standard-version (Node.js), semantic-release (通用), git-cliff (Rust)。
  • 示例(语义化版本)
    • 如果你的 commit 信息包含 feat:,系统自动将 0.0 变成 1.0
    • 如果包含 fix:,自动变成 0.1

使用构建工具的内置功能

A. Node.js / JavaScript

  • npm:在 package.json 中修改 version 字段。

    # 自动更新补丁号 (1.0.0 -> 1.0.1)
    npm version patch
    # 自动更新次版本号 (1.0.0 -> 1.1.0)
    npm version minor
    # 自动更新主版本号 (1.0.0 -> 2.0.0)
    npm version major

    这会自动创建一个 Git commit 和 Tag。

  • Vite / Webpack:通常通过插件或环境变量实现,例如在 vite.config.ts 中读取 package.jsonversion

B. Java / Gradle (Android) / Maven

  • Gradle:通常在 build.gradlegradle.properties 中定义。

    // 方式1:手动定义,通过CI/CD替换
    version = "1.0.0"
    // 方式2:自动获取Git提交计数(常用于Android)
    def versionCode = System.getenv("VERSION_CODE") ?: gitCommitCount()
    versionName = "1.0.$versionCode"
  • Maven:使用 maven-release-pluginversions-maven-plugin

    # 自动更新版本号并打标签
    mvn release:prepare

C. Python

  • Poetrypoetry version patch
  • setuptools:通过 setup.cfgsetup.py,结合 CI 环境变量。
  • bumpversion/bump2version(旧但稳定):读取配置文件,自动修改多个文件中的版本号。

在 CI/CD 流程中自动生成

这是最“自动化”的方式,版本号通常与流水线编号Git 提交哈希绑定。

  • 示例:构建号 + Git SHA

    • 一个常见的做法是:0.0.${BUILD_NUMBER}0.0-${GIT_SHORT_SHA}
    • Jenkins:使用环境变量 ${BUILD_NUMBER}
    • GitHub Actions:使用 github.run_numbergithub.sha
    • GitLab CI:使用 CI_PIPELINE_ID
  • 示例:基于日期

    • 04.10.01 (年.月.日.当日构建序号)。

PowerShell / Bash 脚本(全流程控制)

如果你需要完全自定义,可以写一个简单的脚本:

Bash 脚本示例(自增补丁号):

#!/bin/bash
# 读取当前版本 (假设存在 version.txt)
CURRENT_VERSION=$(cat version.txt)
# 分割版本号 (1.2.3)
IFS='.' read -ra ADDR <<< "$CURRENT_VERSION"
MAJOR=${ADDR[0]}
MINOR=${ADDR[1]}
PATCH=${ADDR[2]}
# 增加补丁号
PATCH=$((PATCH + 1))
# 组合新版本
NEW_VERSION="$MAJOR.$MINOR.$PATCH"
# 写入文件
echo $NEW_VERSION > version.txt
echo "Updated to version: $NEW_VERSION"

核心建议:选择哪种策略?

场景 推荐方案 原因
开源库 / 正式发布 Git 标签 + 语义化版本 清晰、规范、可追溯,如 npm versionsemantic-release
内部测试 / 快速迭代 CI 构建号 + Git SHA 唯一性强,能精确定位代码,在 CI 环境变量中获取即可。
小团队 / 简单项目 npm version / Poetry poetry version 命令行一行搞定,集成在 package.jsonpyproject.toml 中。
多环境部署(如 Android) Gradle 脚本 + Git 提交次数 保证版本号单调递增,且能区分不同构建。

如果你能提供更具体的开发环境(如:是 iOS 开发?Java 后端?还是 Python 脚本?),我可以给出更详细的代码示例。

抱歉,评论功能暂时关闭!