From 4e862da83f3bfce40d46c6c7d4016e634e9af5d2 Mon Sep 17 00:00:00 2001 From: RUI <298977887@qq.com> Date: Fri, 6 Jun 2025 01:23:00 +0800 Subject: [PATCH] 0606.3 --- .github/workflows/nextjs.yml | 85 ++++++++++++------------------------ 1 file changed, 29 insertions(+), 56 deletions(-) diff --git a/.github/workflows/nextjs.yml b/.github/workflows/nextjs.yml index 2225f8b..6ed1241 100644 --- a/.github/workflows/nextjs.yml +++ b/.github/workflows/nextjs.yml @@ -7,8 +7,8 @@ on: branches: [ "main" ] jobs: - # 构建作业 - build: + # 构建并部署作业 + build-and-deploy: runs-on: ubuntu-latest steps: @@ -28,22 +28,7 @@ jobs: with: version: 'latest' - # 获取 pnpm store 目录 - - name: 获取 pnpm store 目录 - shell: bash - run: | - echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - - # 缓存 pnpm 依赖 - - name: 缓存 pnpm 依赖 - uses: actions/cache@v3 - with: - path: ${{ env.STORE_PATH }} - key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} - restore-keys: | - ${{ runner.os }}-pnpm-store- - - # 安装依赖 + # 安装依赖(跳过缓存以加速) - name: 安装依赖 run: pnpm install --frozen-lockfile @@ -70,29 +55,9 @@ jobs: # 创建压缩包 tar -czf deploy-package.tar.gz -C deploy-package . - # 上传部署包 (使用 v3 兼容 GHES) - - name: 上传部署包 - uses: actions/upload-artifact@v3 - with: - name: deploy-package - path: deploy-package.tar.gz - retention-days: 7 - - # 部署作业(仅在 main 分支) - deploy: - needs: build - runs-on: ubuntu-latest - if: github.ref == 'refs/heads/main' && github.event_name == 'push' - - steps: - # 下载部署包 (使用 v3 兼容 GHES) - - name: 下载部署包 - uses: actions/download-artifact@v3 - with: - name: deploy-package - - # 拷贝部署包到服务器 + # 拷贝部署包到服务器 (仅在 main 分支推送时执行) - name: 拷贝部署包到服务器 + if: github.ref == 'refs/heads/main' && github.event_name == 'push' uses: appleboy/scp-action@v0.1.4 with: host: ${{ secrets.SERVER_HOST }} @@ -102,8 +67,9 @@ jobs: target: "/vol1/1000/Docker/" overwrite: true - # 在服务器上部署 - - name: 在服务器上部署应用 + # 在服务器上构建和部署 (仅在 main 分支推送时执行) + - name: 在服务器上构建和部署应用 + if: github.ref == 'refs/heads/main' && github.event_name == 'push' uses: appleboy/ssh-action@v1.0.0 with: host: ${{ secrets.SERVER_HOST }} @@ -112,7 +78,7 @@ jobs: script: | set -e # 遇到错误立即退出 - echo "开始部署 saas2 应用..." + echo "🚀 开始部署 saas2 应用..." # 进入 Docker 目录 cd /vol1/1000/Docker/ @@ -128,36 +94,36 @@ jobs: if [ -f "package.json" ]; then mkdir -p backup cp -r ./* backup/ 2>/dev/null || true - echo "已备份当前版本" + echo "📦 已备份当前版本" fi # 解压新版本 tar -xzf ../deploy-package.tar.gz - echo "已解压新版本" + echo "📂 已解压新版本" # 停止并删除旧容器(如果存在) if [ "$(docker ps -q -f name=saas2-app)" ]; then - echo "停止运行中的容器..." + echo "⏹️ 停止运行中的容器..." docker stop saas2-app fi if [ "$(docker ps -aq -f name=saas2-app)" ]; then - echo "删除旧容器..." + echo "🗑️ 删除旧容器..." docker rm saas2-app fi # 删除旧镜像(如果存在) if [ "$(docker images -q saas2-app:latest)" ]; then - echo "删除旧镜像..." + echo "🗑️ 删除旧镜像..." docker rmi saas2-app:latest fi # 构建新的Docker镜像 - echo "构建新的 Docker 镜像..." + echo "🔨 构建新的 Docker 镜像..." docker build -t saas2-app:latest . # 运行新容器 - echo "启动新容器..." + echo "▶️ 启动新容器..." docker run -d \ --name saas2-app \ --restart unless-stopped \ @@ -169,7 +135,7 @@ jobs: saas2-app:latest # 等待容器启动 - echo "等待容器启动..." + echo "⏳ 等待容器启动..." sleep 15 # 检查容器状态 @@ -177,10 +143,10 @@ jobs: echo "✅ 部署成功!容器状态:" docker ps | grep saas2-app echo "" - echo "应用访问地址: http://$(hostname -I | awk '{print $1}'):3000" + echo "🌐 应用访问地址: http://$(hostname -I | awk '{print $1}'):3000" # 测试健康检查 - echo "测试健康检查..." + echo "🔍 测试健康检查..." if wget --timeout=10 -qO- http://localhost:3000/api/health > /dev/null 2>&1; then echo "✅ 健康检查通过" else @@ -188,16 +154,23 @@ jobs: fi else echo "❌ 部署失败!容器未能正常启动" - echo "容器日志:" + echo "📋 容器日志:" docker logs saas2-app || true exit 1 fi # 清理无用的Docker资源 - echo "清理无用的 Docker 资源..." + echo "🧹 清理无用的 Docker 资源..." docker system prune -f # 删除部署包 rm -f ../deploy-package.tar.gz - echo "🎉 部署完成!" \ No newline at end of file + echo "🎉 部署完成!" + + # 清理临时文件 + - name: 清理临时文件 + if: always() + run: | + rm -rf deploy-package + rm -f deploy-package.tar.gz \ No newline at end of file