This commit is contained in:
vipg
2025-10-09 16:10:50 +08:00
parent f14fb2d098
commit 7649da2cd2
8 changed files with 29 additions and 218 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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