#!/bin/bash # ============================================================ # 资金服务平台 - Docker 镜像构建脚本 # ============================================================ set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 项目根目录 PROJECT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$PROJECT_DIR" # 版本号 VERSION="${VERSION:-0.0.1-SNAPSHOT}" # 日志函数 log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 Docker 是否安装 check_docker() { if ! command -v docker &> /dev/null; then log_error "Docker 未安装,请先安装 Docker" exit 1 fi log_info "Docker 版本: $(docker --version)" } # 配置 Docker 镜像源(需要 sudo) configure_mirror() { log_info "配置 Docker 镜像源..." if [ -f /etc/docker/daemon.json ]; then log_warn "/etc/docker/daemon.json 已存在,跳过配置" return fi sudo tee /etc/docker/daemon.json > /dev/null <<'EOF' { "registry-mirrors": [ "https://docker.m.daocloud.io", "https://dockerhub.icu", "https://hub.rat.dev" ] } EOF log_info "重启 Docker 服务..." sudo systemctl restart docker log_info "镜像源配置完成" } # 构建单个模块 build_module() { local module=$1 local tag="${2:-latest}" log_info "构建模块: $module" docker build \ --build-arg MODULE="$module" \ --build-arg VERSION="$VERSION" \ -t "$module:$VERSION" \ -t "$module:$tag" \ -f Dockerfile \ . if [ $? -eq 0 ]; then log_info "✓ $module 构建成功: $module:$tag" else log_error "✗ $module 构建失败" return 1 fi } # 构建所有模块 build_all() { local modules=( "fund-gateway" "fund-sys" "fund-cust" "fund-proj" "fund-req" "fund-exp" "fund-receipt" "fund-report" "fund-file" ) log_info "开始构建所有模块..." local success=0 local failed=0 for module in "${modules[@]}"; do if build_module "$module"; then ((success++)) else ((failed++)) fi done echo "" log_info "构建完成: 成功 $success, 失败 $failed" if [ $failed -gt 0 ]; then return 1 fi } # 使用 docker-compose 构建 build_with_compose() { log_info "使用 docker-compose 构建所有服务..." docker-compose build --no-cache log_info "docker-compose 构建完成" } # 推送镜像到仓库 push_images() { local registry="${1:-}" if [ -z "$registry" ]; then log_error "请指定镜像仓库地址,例如: push_images registry.example.com" return 1 fi local modules=( "fund-gateway" "fund-sys" "fund-cust" "fund-proj" "fund-req" "fund-exp" "fund-receipt" "fund-report" "fund-file" ) for module in "${modules[@]}"; do log_info "推送 $module..." docker tag "$module:$VERSION" "$registry/$module:$VERSION" docker push "$registry/$module:$VERSION" done log_info "所有镜像推送完成" } # 清理镜像 clean_images() { log_info "清理未使用的镜像..." docker image prune -f log_info "清理完成" } # 显示帮助 show_help() { echo "资金服务平台 - Docker 镜像构建脚本" echo "" echo "用法: $0 [命令] [参数]" echo "" echo "命令:" echo " check 检查 Docker 环境" echo " mirror 配置 Docker 镜像源(需要 sudo)" echo " build <模块> 构建指定模块" echo " build-all 构建所有模块" echo " compose 使用 docker-compose 构建" echo " push <仓库> 推送镜像到仓库" echo " clean 清理未使用的镜像" echo " help 显示帮助信息" echo "" echo "示例:" echo " $0 build fund-sys # 构建 fund-sys 模块" echo " $0 build-all # 构建所有模块" echo " $0 compose # 使用 docker-compose 构建" echo " $0 push registry.example.com # 推送到私有仓库" echo "" echo "环境变量:" echo " VERSION 镜像版本号,默认: 0.0.1-SNAPSHOT" } # 主函数 main() { local command="${1:-help}" case "$command" in check) check_docker ;; mirror) configure_mirror ;; build) check_docker if [ -z "$2" ]; then log_error "请指定要构建的模块" exit 1 fi build_module "$2" "${3:-latest}" ;; build-all) check_docker build_all ;; compose) check_docker build_with_compose ;; push) push_images "$2" ;; clean) clean_images ;; help|--help|-h) show_help ;; *) log_error "未知命令: $command" show_help exit 1 ;; esac } main "$@"