diff --git a/api_template/release.sh b/api_template/release.sh index 6e457bf..4309c5b 100755 --- a/api_template/release.sh +++ b/api_template/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-template-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/api/api_delete/release.sh b/deploy/api/api_delete/release.sh index 8e1a816..5c208a9 100755 --- a/deploy/api/api_delete/release.sh +++ b/deploy/api/api_delete/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-delete-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/api/api_gateway/release.sh b/deploy/api/api_gateway/release.sh index cbea1db..418ec0e 100755 --- a/deploy/api/api_gateway/release.sh +++ b/deploy/api/api_gateway/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-gateway-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/api/api_login/release.sh b/deploy/api/api_login/release.sh index c2915bb..b38aecf 100755 --- a/deploy/api/api_login/release.sh +++ b/deploy/api/api_login/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-login-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/api/api_register/release.sh b/deploy/api/api_register/release.sh index b2ed40f..62ea272 100755 --- a/deploy/api/api_register/release.sh +++ b/deploy/api/api_register/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-register-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/api/api_update_account/release.sh b/deploy/api/api_update_account/release.sh index e9844a8..ce683a6 100755 --- a/deploy/api/api_update_account/release.sh +++ b/deploy/api/api_update_account/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-update-account-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/api/api_update_password/release.sh b/deploy/api/api_update_password/release.sh index de2a5c2..760d402 100755 --- a/deploy/api/api_update_password/release.sh +++ b/deploy/api/api_update_password/release.sh @@ -5,7 +5,6 @@ set -e # 当任何命令失败时立即退出脚本 IMAGE_NAME="user-update-password-api" IMAGE_TAG="1.0.0" FULL_IMAGE="${IMAGE_NAME}:${IMAGE_TAG}" -TAR_FILE="${IMAGE_NAME}-${IMAGE_TAG}.tar" echo "开始删除现有镜像 ${FULL_IMAGE}..." if sudo docker rmi -f "${FULL_IMAGE}" >/dev/null 2>&1; then @@ -20,23 +19,4 @@ if sudo docker build -t "${FULL_IMAGE}" .; then else echo "错误:镜像构建失败" >&2 exit 1 -fi - -echo "开始处理镜像压缩包..." -# 如果存在同名压缩包则删除 -if [ -f "${TAR_FILE}" ]; then - echo "发现现有压缩包 ${TAR_FILE},正在删除..." - rm -f "${TAR_FILE}" -fi - -# 打包镜像为tar文件 -echo "开始将镜像 ${FULL_IMAGE} 打包为 ${TAR_FILE}..." -if sudo docker save -o "${TAR_FILE}" "${FULL_IMAGE}"; then - echo "镜像打包成功!生成文件:${TAR_FILE}" - # 添加最高级别的可读写权限 - sudo chmod 777 "${TAR_FILE}" - echo "已为 ${TAR_FILE} 设置最高权限(777)" -else - echo "错误:镜像打包失败" >&2 - exit 1 fi \ No newline at end of file diff --git a/deploy/deploy.sh b/deploy/deploy.sh index b27ef68..8222bab 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -9,6 +9,7 @@ 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} @@ -26,89 +27,39 @@ else exit 1 fi -# 步骤2:进入images目录加载所有镜像 -echo -e "\n${YELLOW}===== 第二步:加载images目录下的所有镜像 ====="${NC} -IMAGES_DIR="./images" -if [ -d "$IMAGES_DIR" ]; then - cd "$IMAGES_DIR" || { - echo -e "${RED}错误:无法进入目录 $IMAGES_DIR${NC}" - exit 1 - } - - # 遍历所有镜像文件(支持.tar和.tar.gz格式) - image_files=$(find . -type f -name "*.tar" -o -name "*.tar.gz") - if [ -z "$image_files" ]; then - echo -e "${YELLOW}警告:$IMAGES_DIR 目录下未找到镜像文件${NC}" - else - for file in $image_files; do - echo "处理镜像文件:$file" +# 步骤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}" - # 临时加载镜像并获取输出(修复判断逻辑) - temp_load_output=$(docker load -i "$file" 2>&1) - # 检查临时加载是否成功(通过返回码判断,而非输出内容) - if [ $? -ne 0 ]; then - echo -e " ${RED}临时加载镜像 $file 失败:$temp_load_output${NC}" - exit 1 - fi - - # 从输出中提取镜像ID(兼容不同格式的输出) - temp_image_id=$(echo "$temp_load_output" | awk '/Loaded image ID: / {print $4}') - # 如果未提取到ID,尝试从"Loaded image: 镜像名:标签"中获取标签 - if [ -z "$temp_image_id" ]; then - image_tag=$(echo "$temp_load_output" | awk '/Loaded image: / {print $3}') - if [ -n "$image_tag" ]; then - temp_image_id=$(docker images --format '{{.ID}}' "$image_tag" | head -n 1) - fi - fi - - # 再次检查是否获取到镜像ID - if [ -z "$temp_image_id" ]; then - echo -e " ${RED}无法获取镜像 $file 的ID,加载失败${NC}" - exit 1 - fi - - # 获取镜像标签 - image_tags=$(docker image inspect --format '{{range .RepoTags}}{{.}} {{end}}' "$temp_image_id") - if [ -z "$image_tags" ]; then - echo -e " ${YELLOW}警告:镜像 $file 没有标签信息,直接删除临时镜像${NC}" - docker rmi -f "$temp_image_id" >/dev/null 2>&1 - else - # 先删除已存在的同名标签镜像 - for tag in $image_tags; do - if docker images --format '{{.Repository}}:{{.Tag}}' | grep -q "^$tag$"; then - echo " 发现已存在镜像 $tag,正在删除..." - if docker rmi -f "$tag" >/dev/null 2>&1; then - echo -e " ${GREEN}成功删除镜像 $tag${NC}" - else - echo -e " ${RED}删除镜像 $tag 失败!${NC}" - exit 1 - fi - fi - done + # 检查release.sh是否存在 + release_script="${api_folder}/release.sh" + if [ -f "$release_script" ]; then + echo "给予 $release_script 执行权限..." + chmod +x "$release_script" - # 删除临时加载的镜像 - docker rmi -f "$temp_image_id" >/dev/null 2>&1 - fi - - # 正式加载镜像 - echo " 正在加载镜像:$file" - load_output=$(docker load -i "$file" 2>&1) - if [ $? -eq 0 ]; then - echo -e " ${GREEN}镜像 $file 加载成功:$load_output${NC}" + 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 " ${RED}镜像 $file 加载失败:$load_output${NC}" - exit 1 + echo -e "${YELLOW}警告:$api_folder 中未找到 release.sh,跳过该目录${NC}" fi - done - fi - - # 返回根目录 - cd .. || { - echo -e "${RED}错误:无法返回根目录${NC}" - exit 1 - } + fi + done else - echo -e "${RED}错误:未找到 $IMAGES_DIR 目录${NC}" + echo -e "${RED}错误:未找到 $API_DIR 目录${NC}" exit 1 fi