#!/bin/bash set -e # 遇到错误立即退出,确保部署流程的可靠性 # 颜色输出配置(增强可读性) RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 重置颜色 COMPOSE_PROJECT_NAME="user_service" DOCKER_COMPOSE_FILE="./docker-compose.yaml" API_DIR="./api" # API服务所在目录 # 步骤1:停止指定名称的docker-compose编排 echo -e "${YELLOW}===== 第一步:停止编排名称为 $COMPOSE_PROJECT_NAME 的服务 ====="${NC} if [ -f "$DOCKER_COMPOSE_FILE" ]; then echo "正在停止服务..." docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" down if [ $? -eq 0 ]; then echo -e "${GREEN}编排 $COMPOSE_PROJECT_NAME 已成功停止${NC}" else echo -e "${RED}停止编排 $COMPOSE_PROJECT_NAME 失败!${NC}" exit 1 fi else echo -e "${RED}错误:未找到 $DOCKER_COMPOSE_FILE 文件${NC}" exit 1 fi # 步骤2:处理所有API服务的release.sh echo -e "\n${YELLOW}===== 第二步:执行所有API服务的构建脚本 ====="${NC} if [ -d "$API_DIR" ]; then # 遍历API目录下的所有子文件夹 for api_folder in "$API_DIR"/*/; do # 检查是否为目录 if [ -d "$api_folder" ]; then # 提取文件夹名称(用于日志显示) folder_name=$(basename "$api_folder") echo -e "\n${YELLOW}处理服务: $folder_name${NC}" # 检查release.sh是否存在 release_script="${api_folder}/release.sh" if [ -f "$release_script" ]; then echo "给予 $release_script 执行权限..." chmod +x "$release_script" echo "执行 $release_script ..." (cd "$api_folder" && ./release.sh) # 进入目录并执行脚本 if [ $? -eq 0 ]; then echo -e "${GREEN}$folder_name 服务构建完成${NC}" else echo -e "${RED}$folder_name 服务构建失败!${NC}" exit 1 fi else echo -e "${YELLOW}警告:$api_folder 中未找到 release.sh,跳过该目录${NC}" fi fi done else echo -e "${RED}错误:未找到 $API_DIR 目录${NC}" exit 1 fi # 步骤3:启动指定名称的docker-compose编排 echo -e "\n${YELLOW}===== 第三步:启动编排名称为 $COMPOSE_PROJECT_NAME 的服务 ====="${NC} if [ -f "$DOCKER_COMPOSE_FILE" ]; then echo "正在启动服务..." docker-compose -f "$DOCKER_COMPOSE_FILE" -p "$COMPOSE_PROJECT_NAME" up -d if [ $? -eq 0 ]; then echo -e "${GREEN}编排 $COMPOSE_PROJECT_NAME 启动成功!${NC}" else echo -e "${RED}启动编排 $COMPOSE_PROJECT_NAME 失败!${NC}" exit 1 fi else echo -e "${RED}错误:未找到 $DOCKER_COMPOSE_FILE 文件${NC}" exit 1 fi echo -e "\n${GREEN}===== 所有部署步骤已完成 ====="${NC}