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

Semver版本管理:Jenkins自动打标签异常问题排查

问题排查:Semver版本升级脚本未按预期生成minor版本标签

我的项目默认Docker镜像构建标签为1.0.0,希望通过Jenkins结合Semver版本控制实现自动化构建、打标签及推送,预期后续版本依次为1.1.0、1.2.0等。但调用以下bash脚本执行时,生成的标签却是1.0.1,请帮忙排查问题。

#!/bin/bash

latest_tag="1.0.0"

# Extract the MAJOR, MINOR, and PATCH numbers from the latest tag
IFS='.' read -r -a version_parts <<< "$latest_tag"
major=${version_parts[0]}
minor=${version_parts[1]}
patch=${version_parts[2]}

# Determine the type of version bump
if [ "$1" == "major" ]; then
    major=$((major + 1))
    minor=0
    patch=0
elif [ "$1" == "minor" ]; then
    minor=$((minor + 1))
    patch=0
else
    patch=$((patch + 1))
fi

# Construct the new version tag
new_tag="$major.$minor.$patch"

# Output the new tag
echo $new_tag

问题原因

脚本的版本升级逻辑完全依赖第一个传入的参数$1:

  • 只有当传入参数为minor时,才会执行minor版本升级(minor+1,patch重置为0);
  • 如果调用脚本时没有传参,或者传入的参数不是major/minor,脚本会默认进入else分支,执行patch版本升级,也就是生成1.0.1这类标签。

解决方法

方法1:调用脚本时明确传入参数

在Jenkins的构建步骤中,执行脚本时必须加上minor参数:

./your-version-script.sh minor

方法2:修改脚本默认行为(可选)

如果希望脚本默认升级minor版本,而非patch,可以调整else分支的逻辑:

else
    # 默认升级minor版本
    minor=$((minor + 1))
    patch=0
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:14:59