docs: 添加 README、Release 模板、docker-compose 编排、构建发布脚本
This commit is contained in:
108
scripts/build-and-push.sh
Executable file
108
scripts/build-and-push.sh
Executable 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 "═══════════════════════════════════════════════════════════"
|
||||
Reference in New Issue
Block a user