Files
CloudSearch/scripts/build-and-push.sh

109 lines
5.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# =============================================================================
# CloudSearch · 构建、推送镜像 & 发布 Release
# =============================================================================
#
# 用法:
# ./scripts/build-and-push.sh [版本号]
#
# 示例:
# ./scripts/build-and-push.sh v0.3.32 # 指定版本
# ./scripts/build-and-push.sh # 自动读取 VERSION 文件
#
# 前置要求:
# - Docker 已安装
# - 已登录 Gitea 容器注册表docker login gitea.timxx.cn
# - Git 仓库已配置 remote
#
# =============================================================================
set -euo pipefail
# ── 配置 ────────────────────────────────────────────────────────────────────
REGISTRY="gitea.timxx.cn"
NAMESPACE="admin"
IMAGE_NAME="cloudsearch"
BUILD_DIR="$(cd "$(dirname "$0")/.." && pwd)"
SCRIPTS_DIR="$(cd "$(dirname "$0")" && pwd)"
# ── 版本号 ──────────────────────────────────────────────────────────────────
if [[ -n "${1:-}" ]]; then
VERSION="$1"
# 去掉 v 前缀(如果有),统一格式
VERSION="${VERSION#v}"
else
# 从 VERSION 文件读取
VERSION_FILE="$BUILD_DIR/VERSION"
if [[ ! -f "$VERSION_FILE" ]]; then
echo "❌ VERSION 文件不存在,请指定版本号:$0 vX.Y.Z"
exit 1
fi
VERSION="$(cat "$VERSION_FILE")"
fi
FULL_TAG="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:v${VERSION}"
LATEST_TAG="${REGISTRY}/${NAMESPACE}/${IMAGE_NAME}:latest"
LOCAL_TAG="cloudsearch-app:v${VERSION}"
echo "═══════════════════════════════════════════════════════════"
echo " CloudSearch 构建 & 发布"
echo " 版本: v${VERSION}"
echo " 镜像: ${FULL_TAG}"
echo "═══════════════════════════════════════════════════════════"
echo ""
# ── 1. 更新 VERSION 文件 ───────────────────────────────────────────────────
echo "📝 [1/5] 更新 VERSION 文件..."
echo "$VERSION" > "$VERSION_FILE"
echo " VERSION → $(cat $VERSION_FILE)"
# ── 2. 构建 Docker 镜像 ─────────────────────────────────────────────────────
echo ""
echo "🔨 [2/5] 构建 Docker 镜像..."
cd "$BUILD_DIR/source_clean"
docker build \
-t "$LOCAL_TAG" \
-t "cloudsearch-app:latest" \
.
echo " ✅ 本地镜像构建完成: $LOCAL_TAG"
# ── 3. 标记镜像 ─────────────────────────────────────────────────────────────
echo ""
echo "🏷️ [3/5] 标记镜像..."
docker tag "cloudsearch-app:latest" "$FULL_TAG"
docker tag "cloudsearch-app:latest" "$LATEST_TAG"
echo " $FULL_TAG"
echo " $LATEST_TAG"
# ── 4. 推送镜像 ─────────────────────────────────────────────────────────────
echo ""
echo "📤 [4/5] 推送镜像到私有仓库..."
docker push "$FULL_TAG"
docker push "$LATEST_TAG"
echo " ✅ 推送完成"
# ── 5. 创建 Git 标签 ───────────────────────────────────────────────────────
echo ""
echo "🏷️ [5/5] 创建 Git 标签..."
cd "$BUILD_DIR"
git add VERSION
git commit -m "release: v${VERSION}" || echo " (无变更,跳过 commit)"
git tag -a "v${VERSION}" -m "Release v${VERSION}"
echo " 标签 v${VERSION} 已创建(稍后 git push --tags"
# ── 完成 ────────────────────────────────────────────────────────────────────
echo ""
echo "═══════════════════════════════════════════════════════════"
echo " ✅ 发布完成!"
echo ""
echo " 推送到远程:"
echo " git push origin master --tags"
echo ""
echo " 生产部署:"
echo " docker pull ${FULL_TAG}"
echo " docker compose up -d app"
echo ""
echo " 验证:"
echo " curl -s http://localhost:9527/health | jq .version"
echo "═══════════════════════════════════════════════════════════"