feat: 增加生成镜像标签对纯数字分支的支持
This commit is contained in:
+33
-14
@@ -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
|
||||||
Reference in New Issue
Block a user