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 major=$(echo "$clean_ver" | cut -d. -f1)
local minor=$(echo "$clean_ver" | cut -d. -f2)
local patch=$(echo "$clean_ver" | cut -d. -f3)
local minor=""
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"
# v<major>
# 添加major标签(如果major与clean_ver不同)
if [ -n "$major" ] && [ "$major" != "$clean_ver" ]; then
tags="$tags,$repo:v$major,$repo:$major"
fi
# v<major>.<minor>
# 添加major.minor标签(如果minor存在且组合不同于clean_ver
if [ -n "$minor" ]; then
local mm="$major.$minor"
if [ "$mm" != "$clean_ver" ]; then
tags="$tags,$repo:v$mm,$repo:$mm"
local major_minor="$major.$minor"
if [ "$major_minor" != "$clean_ver" ]; then
tags="$tags,$repo:v$major_minor,$repo:$major_minor"
fi
fi
@@ -147,7 +160,10 @@ build_and_push() {
echo ""
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
@@ -155,8 +171,8 @@ build_and_push() {
# 主干分支
build_args="-t $SWR_REPO:latest"
track_image "$SWR_REPO:latest"
elif is_semver_like "$CI_COMMIT_BRANCH" && echo "$CI_COMMIT_BRANCH" | grep -q '\.'; then
# 语义化分支 → 生成带 v 的多级标签; 仅当包含 '.' 时才生成多级标签(如 v1.2.3 → v1.2, v1
elif is_semver_like "$CI_COMMIT_BRANCH"; then
# 语义化分支 → 生成带 v 的多级标签; 支持纯数字版本号(如 12, v1, 1.2 等
TAGS=$(generate_version_tags "$CI_COMMIT_BRANCH" "$SWR_REPO")
IFS=','
for tag in $TAGS; do
@@ -165,7 +181,7 @@ build_and_push() {
done
unset IFS
else
# 普通分支或纯数字(如 12, feature-x)→ 单标签 + sha
# 普通分支(如 feature-x)→ 单标签 + sha
local safe_branch=$(sanitize_label "$CI_COMMIT_BRANCH")
build_args="-t $SWR_REPO:$safe_branch"
track_image "$SWR_REPO:$safe_branch"
@@ -173,7 +189,10 @@ build_and_push() {
echo ""
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
echo "==> 错误: 无有效构建上下文"
@@ -210,4 +229,4 @@ main() {
}
# 执行主函数
main
main