feat: 增加生成镜像标签对纯数字分支的支持

This commit is contained in:
2026-01-20 11:27:37 +08:00
parent 99f494f83f
commit b0ca0dc3a3
+33 -14
View File
@@ -46,23 +46,36 @@ generate_version_tags() {
local clean_ver=$(echo "$ver" | sed 's/^[vV]//') local clean_ver=$(echo "$ver" | sed 's/^[vV]//')
# 提取各段 # 提取各段,使用更安全的方式
local major=$(echo "$clean_ver" | cut -d. -f1) local major=$(echo "$clean_ver" | cut -d. -f1)
local minor=$(echo "$clean_ver" | cut -d. -f2) local minor=""
local patch=$(echo "$clean_ver" | cut -d. -f3) local patch=""
# 检查是否包含小数点,如果有则提取minor和patch
if echo "$clean_ver" | grep -q '\.'; then
# 检查是否包含两个小数点(即有patch部分)
if echo "$clean_ver" | grep -q '\..*\.'; then
minor=$(echo "$clean_ver" | cut -d. -f2)
patch=$(echo "$clean_ver" | cut -d. -f3)
else
# 只有一个小数点,即major.minor格式
minor=$(echo "$clean_ver" | cut -d. -f2)
fi
fi
# 开始构建标签列表
local tags="$repo:v$clean_ver,$repo:$clean_ver" local tags="$repo:v$clean_ver,$repo:$clean_ver"
# v<major> # 添加major标签(如果major与clean_ver不同)
if [ -n "$major" ] && [ "$major" != "$clean_ver" ]; then if [ -n "$major" ] && [ "$major" != "$clean_ver" ]; then
tags="$tags,$repo:v$major,$repo:$major" tags="$tags,$repo:v$major,$repo:$major"
fi fi
# v<major>.<minor> # 添加major.minor标签(如果minor存在且组合不同于clean_ver
if [ -n "$minor" ]; then if [ -n "$minor" ]; then
local mm="$major.$minor" local major_minor="$major.$minor"
if [ "$mm" != "$clean_ver" ]; then if [ "$major_minor" != "$clean_ver" ]; then
tags="$tags,$repo:v$mm,$repo:$mm" tags="$tags,$repo:v$major_minor,$repo:$major_minor"
fi fi
fi fi
@@ -147,7 +160,10 @@ build_and_push() {
echo "" echo ""
echo "==> 构建 Tag 镜像: $TAGS" echo "==> 构建 Tag 镜像: $TAGS"
docker buildx build --platform linux/amd64,linux/arm64 $build_args --progress=plain --push --provenance=false --sbom=false . docker buildx build --platform linux/amd64,linux/arm64 $build_args --progress=plain --push --provenance=false --sbom=false . || {
echo "==> 错误: 镜像构建失败"
exit 1
}
# ===== 分支触发 ===== # ===== 分支触发 =====
elif [ -n "${CI_COMMIT_BRANCH:-}" ]; then elif [ -n "${CI_COMMIT_BRANCH:-}" ]; then
@@ -155,8 +171,8 @@ build_and_push() {
# 主干分支 # 主干分支
build_args="-t $SWR_REPO:latest" build_args="-t $SWR_REPO:latest"
track_image "$SWR_REPO:latest" track_image "$SWR_REPO:latest"
elif is_semver_like "$CI_COMMIT_BRANCH" && echo "$CI_COMMIT_BRANCH" | grep -q '\.'; then elif is_semver_like "$CI_COMMIT_BRANCH"; then
# 语义化分支 → 生成带 v 的多级标签; 仅当包含 '.' 时才生成多级标签(如 v1.2.3 → v1.2, v1 # 语义化分支 → 生成带 v 的多级标签; 支持纯数字版本号(如 12, v1, 1.2 等
TAGS=$(generate_version_tags "$CI_COMMIT_BRANCH" "$SWR_REPO") TAGS=$(generate_version_tags "$CI_COMMIT_BRANCH" "$SWR_REPO")
IFS=',' IFS=','
for tag in $TAGS; do for tag in $TAGS; do
@@ -165,7 +181,7 @@ build_and_push() {
done done
unset IFS unset IFS
else else
# 普通分支或纯数字(如 12, feature-x)→ 单标签 + sha # 普通分支(如 feature-x)→ 单标签 + sha
local safe_branch=$(sanitize_label "$CI_COMMIT_BRANCH") local safe_branch=$(sanitize_label "$CI_COMMIT_BRANCH")
build_args="-t $SWR_REPO:$safe_branch" build_args="-t $SWR_REPO:$safe_branch"
track_image "$SWR_REPO:$safe_branch" track_image "$SWR_REPO:$safe_branch"
@@ -173,7 +189,10 @@ build_and_push() {
echo "" echo ""
echo "==> 构建 Branch 镜像: $build_args" echo "==> 构建 Branch 镜像: $build_args"
docker buildx build --platform linux/amd64,linux/arm64 $build_args --progress=plain --push --provenance=false --sbom=false . docker buildx build --platform linux/amd64,linux/arm64 $build_args --progress=plain --push --provenance=false --sbom=false . || {
echo "==> 错误: 镜像构建失败"
exit 1
}
else else
echo "==> 错误: 无有效构建上下文" echo "==> 错误: 无有效构建上下文"
@@ -210,4 +229,4 @@ main() {
} }
# 执行主函数 # 执行主函数
main main