#!/bin/bash set -e # 遇到错误立即退出,确保部署流程的可靠性 # 颜色输出配置(增强可读性) RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 重置颜色 # 步骤1:停止当前运行的 docker-compose 编排 echo -e "${YELLOW}===== 第一步:停止当前 docker-compose 服务 ====="${NC} if [ -f "./docker-compose.yaml" ]; then echo "正在停止现有服务..." docker-compose -f ./docker-compose.yaml down if [ $? -eq 0 ]; then echo -e "${GREEN}现有 docker-compose 服务已成功停止${NC}" else echo -e "${RED}停止 docker-compose 服务失败!${NC}" exit 1 fi else echo -e "${RED}错误:未找到当前目录下的 docker-compose.yaml 文件${NC}" exit 1 fi # 步骤2:遍历 api_ 开头的目录并执行 release.sh echo -e "\n${YELLOW}===== 第二步:处理 api_ 开头的服务目录 ====="${NC} for dir in ./api_*/; do # 提取目录名称(移除路径和末尾斜杠) dir_name=$(basename "${dir%/}") # 步骤3:跳过 api_template 目录 if [ "$dir_name" = "api_template" ]; then echo -e "${YELLOW} 跳过目录:$dir_name${NC}" continue fi # 检查目录是否有效 if [ ! -d "$dir" ]; then echo -e "${RED} 警告:$dir 不是有效目录,已跳过${NC}" continue fi echo -e "\n处理目录:$dir_name" # 进入目标目录 cd "$dir" || { echo -e "${RED} 错误:无法进入目录 $dir_name${NC}" exit 1 } # 检查并执行 release.sh if [ -f "release.sh" ]; then # 添加执行权限 chmod +x release.sh echo " 已为 release.sh 添加执行权限" # 执行脚本 echo " 正在执行 release.sh..." ./release.sh if [ $? -eq 0 ]; then echo -e " ${GREEN}release.sh 执行成功${NC}" else echo -e " ${RED}release.sh 执行失败!${NC}" exit 1 fi else echo -e "${YELLOW} 警告:目录 $dir_name 中未找到 release.sh,已跳过${NC}" fi # 返回上级目录,继续处理其他目录 cd .. || { echo -e "${RED} 错误:无法返回上级目录${NC}" exit 1 } done # 步骤4:启动新的 docker-compose 编排 echo -e "\n${YELLOW}===== 第三步:启动新的 docker-compose 服务 ====="${NC} if [ -f "./docker-compose.yaml" ]; then echo "正在启动服务..." docker-compose -f ./docker-compose.yaml up -d if [ $? -eq 0 ]; then echo -e "${GREEN}docker-compose 服务启动成功!${NC}" else echo -e "${RED}启动 docker-compose 服务失败!${NC}" exit 1 fi else echo -e "${RED}错误:未找到当前目录下的 docker-compose.yaml 文件${NC}" exit 1 fi echo -e "\n${GREEN}===== 所有部署步骤已完成 ====="${NC}