test: 配置本地开发环境并完善测试 #19
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy TinyFlow | |
| on: | |
| push: | |
| branches: [master, main] | |
| workflow_dispatch: # 支持手动触发 | |
| jobs: | |
| build-and-deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # 1. 检出代码 | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| # 2. 设置 Node.js 环境 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '18' | |
| cache: 'npm' | |
| cache-dependency-path: web/package-lock.json | |
| # 3. 安装前端依赖并构建 | |
| - name: Build Frontend | |
| run: | | |
| cd web | |
| npm ci | |
| npm run build | |
| env: | |
| VITE_SHORT_BASE: ${{ secrets.APP_DOMAIN }} | |
| VITE_API_BASE: ${{ secrets.API_BASE || '' }} | |
| # 4. 设置 Java 环境 | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '17' | |
| cache: 'maven' | |
| # 5. 运行后端测试 | |
| - name: Run Backend Tests | |
| run: mvn clean test | |
| env: | |
| APP_DOMAIN: ${{ secrets.APP_DOMAIN }} | |
| DB_PASSWORD: ${{ secrets.DB_PASSWORD }} | |
| JWT_SECRET: ${{ secrets.JWT_SECRET }} | |
| REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }} | |
| # 6. 构建后端(跳过测试,因为已经运行过) | |
| - name: Build Backend Package | |
| run: mvn clean package -DskipTests | |
| env: | |
| APP_DOMAIN: ${{ secrets.APP_DOMAIN }} | |
| DB_PASSWORD: ${{ secrets.DB_PASSWORD }} | |
| JWT_SECRET: ${{ secrets.JWT_SECRET }} | |
| REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }} | |
| # 7. 部署到服务器 | |
| - name: Deploy to Server | |
| uses: appleboy/[email protected] | |
| env: | |
| APP_DOMAIN: ${{ secrets.APP_DOMAIN }} | |
| DB_PASSWORD: ${{ secrets.DB_PASSWORD }} | |
| JWT_SECRET: ${{ secrets.JWT_SECRET }} | |
| REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }} | |
| with: | |
| host: ${{ secrets.SERVER_HOST }} | |
| port: ${{ secrets.SERVER_PORT }} | |
| username: ${{ secrets.SERVER_USER }} | |
| key: ${{ secrets.SERVER_SSH_KEY }} | |
| envs: APP_DOMAIN,DB_PASSWORD,JWT_SECRET,REDIS_PASSWORD | |
| script: | | |
| cd /opt/TinyFlow | |
| # 拉取最新代码(关键:确保本地更改被丢弃) | |
| git fetch origin | |
| git checkout origin/$(git symbolic-ref --short HEAD) | |
| # 更新 systemd 配置文件中的环境变量 | |
| sudo sed -i "s|Environment=\"APP_DOMAIN=.*\"|Environment=\"APP_DOMAIN=$APP_DOMAIN\"|g" /etc/systemd/system/tinyflow.service | |
| sudo sed -i "s|Environment=\"DB_PASSWORD=.*\"|Environment=\"DB_PASSWORD=$DB_PASSWORD\"|g" /etc/systemd/system/tinyflow.service | |
| sudo sed -i "s|Environment=\"JWT_SECRET=.*\"|Environment=\"JWT_SECRET=$JWT_SECRET\"|g" /etc/systemd/system/tinyflow.service | |
| sudo sed -i "s|Environment=\"REDIS_PASSWORD=.*\"|Environment=\"REDIS_PASSWORD=$REDIS_PASSWORD\"|g" /etc/systemd/system/tinyflow.service | |
| # 重新构建前端 | |
| cd web | |
| npm ci --prefer-offline --no-audit | |
| npm run build | |
| # 重新构建后端 | |
| cd .. | |
| mvn clean package -DskipTests -q | |
| # 重新加载 systemd 并重启服务 | |
| sudo systemctl daemon-reload | |
| sudo systemctl restart tinyflow | |
| # 等待服务启动 | |
| sleep 3 | |
| # 健康检查 | |
| if curl -f http://localhost:8080/actuator/health > /dev/null 2>&1; then | |
| echo "✅ 部署完成!服务已启动" | |
| else | |
| echo "❌ 服务启动失败,请检查日志" | |
| journalctl -u tinyflow -n 50 | |
| exit 1 | |
| fi | |
| # 8. 部署失败通知(可选) | |
| - name: Deployment Failed | |
| if: failure() | |
| run: echo "❌ TinyFlow 部署失败!请检查 GitHub Actions 日志" | |
| # 9. 部署成功通知 | |
| - name: Deployment Success | |
| if: success() | |
| run: echo "✅ TinyFlow 部署成功!所有测试已通过,部署完成。" |