#!/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 "═══════════════════════════════════════════════════════════"