docs: 添加 README、Release 模板、docker-compose 编排、构建发布脚本

This commit is contained in:
2026-05-17 20:05:45 +08:00
parent 389df53d2d
commit 17b40cea7b
5 changed files with 717 additions and 52 deletions

108
scripts/build-and-push.sh Executable file
View File

@@ -0,0 +1,108 @@
#!/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 "═══════════════════════════════════════════════════════════"