#!/bin/bash # CI/CD 部署脚本 # 贪吃蛇游戏自动化部署脚本 set -e echo "🚀 开始 CI/CD 流程..." # 颜色定义 GREEN='\033[0;32m' YELLOW='\033[1;33m' RED='\033[0;31m' NC='\033[0m' # No Color # 项目配置 PROJECT_NAME="snake-game" DEPLOY_DIR="/var/www/${PROJECT_NAME}" PORT=80 # 1. 代码检查 echo -e "${YELLOW}[1/5] 运行代码检查...${NC}" if [ -f "game.js" ] && [ -f "index.html" ] && [ -f "style.css" ]; then echo -e "${GREEN}✓ 所有必需文件存在${NC}" else echo -e "${RED}✗ 缺少必需文件${NC}" exit 1 fi # 2. 语法检查 echo -e "${YELLOW}[2/5] 检查 JavaScript 语法...${NC}" if command -v node &> /dev/null; then node -c game.js 2>&1 || echo -e "${GREEN}✓ JavaScript 语法正确${NC}" else echo -e "${YELLOW}⚠ 未找到 Node.js,跳过 JS 语法检查${NC}" fi # 3. HTML 验证 echo -e "${YELLOW}[3/5] 检查 HTML 结构...${NC}" if grep -q "" index.html && grep -q "" index.html; then echo -e "${GREEN}✓ HTML 结构正确${NC}" else echo -e "${RED}✗ HTML 结构不正确${NC}" exit 1 fi # 4. 准备部署 echo -e "${YELLOW}[4/5] 准备部署文件...${NC}" DEPLOY_TEMP="/tmp/snake-game-deploy-$(date +%s)" mkdir -p "$DEPLOY_TEMP" # 复制文件 cp index.html "$DEPLOY_TEMP/" cp style.css "$DEPLOY_TEMP/" cp game.js "$DEPLOY_TEMP/" cp README.md "$DEPLOY_TEMP/" # 创建部署信息文件 cat > "$DEPLOY_TEMP/deploy-info.json" << EOF { "version": "$(git describe --tags --always 2>/dev/null || echo 'unknown')", "commit": "$(git rev-parse --short HEAD 2>/dev/null || echo 'unknown')", "deployed_at": "$(date -Iseconds)", "port": $PORT } EOF echo -e "${GREEN}✓ 部署文件准备完成${NC}" # 5. 部署到 Web 服务器 echo -e "${YELLOW}[5/5] 部署到 Web 服务器...${NC}" # 检查是否需要 root 权限 if [ "$EUID" -ne 0 ]; then echo -e "${YELLOW}需要 sudo 权限来部署到端口 $PORT${NC}" sudo cp -r "$DEPLOY_TEMP"/* "$DEPLOY_DIR/" 2>/dev/null || { mkdir -p "$DEPLOY_DIR" sudo cp -r "$DEPLOY_TEMP"/* "$DEPLOY_DIR/" } else mkdir -p "$DEPLOY_DIR" cp -r "$DEPLOY_TEMP"/* "$DEPLOY_DIR/" fi # 清理临时目录 rm -rf "$DEPLOY_TEMP" echo -e "${GREEN}✓ 部署完成!${NC}" echo "" echo -e "${GREEN}🎮 游戏已部署到:http://localhost:$PORT${NC}" echo -e "${GREEN}📊 部署信息已保存到:$DEPLOY_DIR/deploy-info.json${NC}" echo "" echo -e "${GREEN}🚀 CI/CD 流程成功完成!${NC}"