You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bitbucket Pipeline中最优实现自动版本号管理

流水线语义化版本号自动管理方案

完全可以实现基于分支识别、提交标签规则的语义化版本号自动递增,适配你们团队在用的1.0.0格式规范,具体实现逻辑和修改后的脚本如下:

前置约定(需先和团队统一)

先确定版本递增规则和提交/分支标记规范:

  • 主版本号(MAJOR,第一位):提交信息包含BREAKING CHANGE、或提交前缀带!、或源分支为major/开头时递增,原有次版本、修订号归零
  • 次版本号(MINOR,第二位):提交信息带feat:前缀、或源分支为feature/开头时递增,原有修订号归零
  • 修订号(PATCH,第三位):提交信息带fix:/perf:前缀、或源分支为hotfix/开头时递增

修改后的自动版本号Shell脚本

git pull --rebase origin dev
npm install -g json

# 提取当前package.json的现有版本号,拆分出MAJOR/MINOR/PATCH
currentVersion=$(json -f package.json version)
IFS='.' read -r MAJOR MINOR PATCH <<< "$currentVersion"

# 识别合并源分支(如果是PR合并场景,多数CI工具会自带源分支环境变量,比如GitLab的CI_MERGE_REQUEST_SOURCE_BRANCH_NAME,GitHub的GITHUB_HEAD_REF,此处写通用提取逻辑示例)
sourceBranch=$(git reflog | grep -o 'merge [^ ]*' | head -n 1 | awk '{print $2}')

# 提取上次版本提交到当前HEAD的所有提交信息
lastVersionCommit=$(git log --grep="\[skip ci\]" --pretty=format:"%h" -n 1)
commitLogs=$(git log "$lastVersionCommit"..HEAD --pretty=format:"%s")

# 按优先级判断要递增的版本位
bumpLevel=""
# 先判断提交信息的最高优先级标记
if echo "$commitLogs" | grep -q "BREAKING CHANGE\|^.*!:"; then
  bumpLevel="major"
elif echo "$commitLogs" | grep -q "^feat:"; then
  bumpLevel="minor"
elif echo "$commitLogs" | grep -q "^fix:\|^perf:"; then
  bumpLevel="patch"
# 提交信息没匹配到标记的话,再用分支名规则判断
elif echo "$sourceBranch" | grep -q "^major/"; then
  bumpLevel="major"
elif echo "$sourceBranch" | grep -q "^feature/"; then
  bumpLevel="minor"
elif echo "$sourceBranch" | grep -q "^hotfix/"; then
  bumpLevel="patch"
# 都没匹配到默认递增修订号,也可以根据团队需求调整为不更新直接退出
else
  bumpLevel="patch"
fi

# 执行版本递增
if [ "$bumpLevel" = "major" ]; then
  MAJOR=$((MAJOR + 1))
  MINOR=0
  PATCH=0
elif [ "$bumpLevel" = "minor" ]; then
  MINOR=$((MINOR + 1))
  PATCH=0
elif [ "$bumpLevel" = "patch" ]; then
  PATCH=$((PATCH + 1))
fi

newVersion="$MAJOR.$MINOR.$PATCH"
json -I -f package.json -e "this.version=\"$newVersion\""

git add package.json
git commit -m "[skip ci] bump version to $newVersion"
git push origin dev

注意事项

  • 如果你用的是标准CI工具(GitLab CI/GitHub Action等),可以直接用平台自带的环境变量获取合并源分支,不需要自己用reflog提取,准确性更高
  • 建议把版本更新逻辑只配置在合并请求合入的触发事件中,避免开发分支直接push时误更新版本
  • 提交前缀规则可以参考通用的提交规范,和团队统一即可,不需要完全照搬上面的示例

内容的提问来源于stack exchange,提问作者Tchiteu Abloh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:06:06