name: Backend CI/CD on: push: branches: - main - master pull_request: branches: - main - master jobs: # 构建和测试 build: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v3 - name: 设置 Node.js uses: actions/setup-node@v3 with: node-version: '18' - name: 安装 pnpm run: npm install -g pnpm - name: 安装依赖 run: pnpm install --frozen-lockfile - name: 代码检查 run: | echo "运行代码检查..." # pnpm run lint - name: 运行测试 run: | echo "运行单元测试..." # pnpm run test - name: 构建项目 run: pnpm run build - name: 上传构建产物 uses: actions/upload-artifact@v3 with: name: dist path: dist/ retention-days: 1 # 部署到生产环境 deploy: needs: build runs-on: ubuntu-latest if: github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master' steps: - name: 检出代码 uses: actions/checkout@v3 - name: 下载构建产物 uses: actions/download-artifact@v3 with: name: dist path: dist/ - name: 部署到服务器 uses: appleboy/ssh-action@master with: host: ${{ secrets.SERVER_HOST }} username: ${{ secrets.SERVER_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} port: ${{ secrets.SERVER_PORT || 22 }} script: | cd /root/self_proj/oauth_nest_demo git pull origin main cd /root/self_proj docker-compose up -d --build backend docker-compose ps - name: 健康检查 run: | echo "等待服务启动..." sleep 10 curl -f http://${{ secrets.SERVER_HOST }}:3000/api || exit 1 - name: 通知部署结果 if: always() run: | if [ ${{ job.status }} == 'success' ]; then echo "✅ 后端部署成功!" else echo "❌ 后端部署失败!" fi