prod2.sh 2.05 KB
#!/bin/bash
# 变量定义
LAST_TAG="1.0.71"
TAG="1.0.72"
TARGET_PATH="/root/web/canrud-outside-nuxt-front"
DOCKERFILE_PATH="/root/web/canrud-outside-nuxt-front/canrud-nuxt-front"
IMAGE_NAME="canrud-outside-front"
TAR_FILE="${TARGET_PATH}/${IMAGE_NAME}_${TAG}.tar"
DOCKER_COMPOSE_FILE="${TARGET_PATH}/docker-compose.yml"

# 定义错误处理函数
handle_error() {
    echo "Error occurred at step: $1. Exiting."
    exit 1
}

# 步骤-1:修改 docker-compose.yml 文件
echo "Updating docker-compose.yml file..."
cat > "$DOCKER_COMPOSE_FILE" <<EOL
version: '3.8'
services:
  canrud-outside-front:
    image: ${IMAGE_NAME}:${TAG}  # 使用指定的镜像和标签
    container_name: canrud-outside-front
    ports:
      - "3000:3000"  # 映射端口
    environment:
      - BASE_URL=http://47.89.254.121:8002/shop
    restart: unless-stopped  # 如果容器退出,自动重启容器,除非是用户手动停止
EOL

# 检查文件是否已更新
if [ $? -ne 0 ]; then
    handle_error "Update docker-compose.yml"
fi

# 步骤0:拉取代码
echo "Pulling latest code..."
cd "${DOCKERFILE_PATH}" || handle_error "Change directory to ${DOCKERFILE_PATH}"
git pull || handle_error "Git pull"

# 步骤1: 构建 Docker 镜像
echo "Building Docker image..."
docker build -t ${IMAGE_NAME}:${TAG} . || handle_error "Docker build"

# 步骤2: 将 Docker 镜像导出为 tar 文件
echo "Saving Docker image to tar file..."
docker save -o ${TAR_FILE} ${IMAGE_NAME}:${TAG} || handle_error "Docker save"

# 步骤3:加载镜像
echo "Loading Docker image from tar file..."
docker load -i "$TAR_FILE" || handle_error "Docker load"

# 步骤4:删除当前运行的容器
echo "Stopping and removing the current container..."
docker stop canrud-outside-front || handle_error "Docker stop"
docker rm canrud-outside-front || handle_error "Docker rm"

# 步骤5:运行当前镜像
echo "Starting container with the new image..."
cd "${TARGET_PATH}" || handle_error "Change directory to ${TARGET_PATH}"
docker-compose up -d || handle_error "Docker-compose up"

echo "All tasks completed successfully!"