From 777e1c8f1cdc4a8deb1cc81f742725ad3d16a3a2 Mon Sep 17 00:00:00 2001 From: yangjianbo Date: Mon, 29 Dec 2025 16:58:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4=E6=B2=A1=E6=9C=89?= =?UTF-8?q?=E5=BF=85=E8=A6=81=E7=9A=84=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build_docker.sh | 261 ------------------------------------------------ 1 file changed, 261 deletions(-) delete mode 100755 build_docker.sh diff --git a/build_docker.sh b/build_docker.sh deleted file mode 100755 index 88b514f5..00000000 --- a/build_docker.sh +++ /dev/null @@ -1,261 +0,0 @@ -#!/bin/bash -# ============================================================================= -# Sub2API Docker 镜像构建脚本 -# ============================================================================= -# -# 用法: -# ./build_docker.sh [选项] -# -# 选项: -# -t, --tag TAG 指定镜像标签 (默认: latest) -# -r, --registry REG 指定镜像仓库地址 (默认: 无) -# -b, --base-registry REG 指定基础镜像仓库地址 (默认: 使用 docker.io) -# -p, --push 构建后推送镜像到仓库 -# --no-cache 不使用 Docker 构建缓存 -# -h, --help 显示帮助信息 -# -# 示例: -# ./build_docker.sh # 构建 sub2api:latest -# ./build_docker.sh -t v1.0.0 # 构建 sub2api:v1.0.0 -# ./build_docker.sh -r ghcr.io/user -p # 构建并推送到 GitHub Container Registry -# ./build_docker.sh -t v1.0.0 --no-cache # 不使用缓存构建 -# -# ============================================================================= - -set -e # 遇到错误立即退出 - -# ============================================================================= -# 颜色定义 -# ============================================================================= -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -BLUE='\033[0;34m' -NC='\033[0m' # No Color - -# ============================================================================= -# 默认配置 -# ============================================================================= -IMAGE_NAME="sub2api" -TAG="latest" -REGISTRY="" -BASE_IMAGE_REGISTRY="${BASE_IMAGE_REGISTRY:-}" -PUSH=false -NO_CACHE="" - -# ============================================================================= -# 辅助函数 -# ============================================================================= - -# 打印带颜色的信息 -info() { - echo -e "${BLUE}[INFO]${NC} $1" -} - -success() { - echo -e "${GREEN}[SUCCESS]${NC} $1" -} - -warn() { - echo -e "${YELLOW}[WARN]${NC} $1" -} - -error() { - echo -e "${RED}[ERROR]${NC} $1" - exit 1 -} - -# 显示帮助信息 -show_help() { - head -30 "$0" | tail -25 - exit 0 -} - -# ============================================================================= -# 参数解析 -# ============================================================================= -while [[ $# -gt 0 ]]; do - case $1 in - -t|--tag) - TAG="$2" - shift 2 - ;; - -r|--registry) - REGISTRY="$2" - shift 2 - ;; - -b|--base-registry) - BASE_IMAGE_REGISTRY="$2" - shift 2 - ;; - -p|--push) - PUSH=true - shift - ;; - --no-cache) - NO_CACHE="--no-cache" - shift - ;; - -h|--help) - show_help - ;; - *) - error "未知选项: $1\n使用 -h 或 --help 查看帮助" - ;; - esac -done - -# ============================================================================= -# 获取构建信息 -# ============================================================================= - -# 获取 Git commit hash -get_commit() { - if git rev-parse --git-dir > /dev/null 2>&1; then - git rev-parse --short HEAD 2>/dev/null || echo "unknown" - else - echo "unknown" - fi -} - -# 获取版本号 (优先使用 git tag) -get_version() { - if git rev-parse --git-dir > /dev/null 2>&1; then - # 尝试获取最近的 tag - local tag=$(git describe --tags --abbrev=0 2>/dev/null || echo "") - if [[ -n "$tag" ]]; then - echo "$tag" - else - # 没有 tag,使用 commit hash - echo "dev-$(get_commit)" - fi - else - echo "dev" - fi -} - -# 获取构建日期 (ISO 8601 格式) -get_date() { - date -u +"%Y-%m-%dT%H:%M:%SZ" -} - -# ============================================================================= -# 主逻辑 -# ============================================================================= - -# 切换到项目根目录 -SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -cd "$SCRIPT_DIR" - -# 检查 Dockerfile 是否存在 -if [[ ! -f "Dockerfile" ]]; then - error "Dockerfile 不存在,请确保在项目根目录运行此脚本" -fi - -# 获取构建参数 -VERSION=$(get_version) -COMMIT=$(get_commit) -DATE=$(get_date) - -# 解析基础镜像 -NODE_IMAGE="node:24-alpine" -GOLANG_IMAGE="golang:1.25-alpine" -ALPINE_IMAGE="alpine:3.19" -if [[ -n "$BASE_IMAGE_REGISTRY" ]]; then - BASE_IMAGE_REGISTRY="${BASE_IMAGE_REGISTRY%/}" - NODE_IMAGE="${BASE_IMAGE_REGISTRY}/library/node:24-alpine" - GOLANG_IMAGE="${BASE_IMAGE_REGISTRY}/library/golang:1.25-alpine" - ALPINE_IMAGE="${BASE_IMAGE_REGISTRY}/library/alpine:3.19" -fi - -# 构建完整镜像名称 -if [[ -n "$REGISTRY" ]]; then - FULL_IMAGE_NAME="${REGISTRY}/${IMAGE_NAME}:${TAG}" -else - FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}" -fi - -# 打印构建信息 -echo "" -echo "==============================================" -echo " Sub2API Docker 镜像构建" -echo "==============================================" -info "镜像名称: ${FULL_IMAGE_NAME}" -info "版本: ${VERSION}" -info "Commit: ${COMMIT}" -info "构建时间: ${DATE}" -if [[ -n "$BASE_IMAGE_REGISTRY" ]]; then - info "基础镜像仓库: ${BASE_IMAGE_REGISTRY}" -fi -if [[ -n "$NO_CACHE" ]]; then - info "缓存: 禁用" -fi -echo "==============================================" -echo "" - -# 执行构建 -info "开始构建 Docker 镜像..." - -docker build \ - ${NO_CACHE} \ - --build-arg VERSION="${VERSION}" \ - --build-arg COMMIT="${COMMIT}" \ - --build-arg DATE="${DATE}" \ - --build-arg NODE_IMAGE="${NODE_IMAGE}" \ - --build-arg GOLANG_IMAGE="${GOLANG_IMAGE}" \ - --build-arg ALPINE_IMAGE="${ALPINE_IMAGE}" \ - -t "${FULL_IMAGE_NAME}" \ - -f Dockerfile \ - . - -# 检查构建结果 -if [[ $? -eq 0 ]]; then - success "镜像构建成功: ${FULL_IMAGE_NAME}" -else - error "镜像构建失败" -fi - -# 如果指定了 latest 以外的 tag,同时打上 latest 标签 -if [[ "$TAG" != "latest" && -z "$REGISTRY" ]]; then - info "同时标记为 latest..." - docker tag "${FULL_IMAGE_NAME}" "${IMAGE_NAME}:latest" -fi - -# 推送镜像 -if [[ "$PUSH" == true ]]; then - if [[ -z "$REGISTRY" ]]; then - warn "未指定镜像仓库 (-r),跳过推送" - else - info "推送镜像到仓库..." - docker push "${FULL_IMAGE_NAME}" - - # 如果不是 latest,也推送 latest 标签 - if [[ "$TAG" != "latest" ]]; then - LATEST_IMAGE="${REGISTRY}/${IMAGE_NAME}:latest" - docker tag "${FULL_IMAGE_NAME}" "${LATEST_IMAGE}" - docker push "${LATEST_IMAGE}" - fi - - success "镜像推送成功" - fi -fi - -# 显示镜像信息 -echo "" -echo "==============================================" -info "构建完成!" -echo "==============================================" -echo "" -info "运行容器示例:" -echo " docker run -d \\" -echo " --name sub2api \\" -echo " -p 8080:8080 \\" -echo " -e AUTO_SETUP=true \\" -echo " -e DATABASE_HOST=your-db-host \\" -echo " -e DATABASE_PASSWORD=your-password \\" -echo " -e REDIS_HOST=your-redis-host \\" -echo " ${FULL_IMAGE_NAME}" -echo "" -info "查看镜像大小:" -docker images "${IMAGE_NAME}" --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" -echo ""